2009-06-10 38 views
10

Không có khả năng truy cập .htaccess Tôi thấy mình bị bế tắc sáng tạo. Không có mod_rewriting cho tôi. Tuy nhiên, tôi muốn để có thể làm những thứ tốt đẹp như:URL đẹp mà không có mod_rewrite, không có .htaccess

http://www.example.com/Blog/2009/12/10/ 
http://www.example.com/Title_Of_This_Page 

lựa chọn thay thế của tôi là gì?

Đáp lại câu trả lời:

  • Tôi đang xây dựng với php5
  • Tôi không có quyền truy cập vào .htaccess
  • http://www.example.com/index.php/Blog/ là một kỹ thuật được biết đến nhưng tôi không thích nó . Là cho thấy php để nói.
  • Tôi làm cách nào để tạo các tệp PHP mở rộng? Điều này sẽ làm các trick?
  • Sẽ sử dụng kỹ thuật 404 tùy chỉnh làm tổn thương hiệu suất như thế nào?
+0

Máy chủ web nào? Hoặc, bạn đang hỏi làm thế nào để có được url PHP mở rộng trên IIS? –

+0

PHP mở rộng sẽ tạo ra cùng một ảo giác đúng không? Mặt khác,/Blog/2009/12/10 sẽ không hoạt động? – Kriem

Trả lời

11

Nếu bạn có quyền đặt tài liệu lỗi tùy chỉnh cho máy chủ của mình, bạn có thể sử dụng tài liệu này để chuyển hướng các yêu cầu 404.

Ví dụ: cho Apache (http://httpd.apache.org/docs/2.0/mod/core.html#errordocument)

ErrorDocument 404 /index.php 

Trong index.php bạn có thể tiến hành yêu cầu bằng cách sử dụng dữ liệu từ mảng $ _SERVER.

+0

Ah, đánh tôi với nó. Tôi nghĩ về điều này trong 5 phút và cuối cùng cũng nghĩ ra điều tương tự. –

+0

Điều này ảnh hưởng đến hiệu suất như thế nào? – Kriem

+10

Tài liệu được trả lại vẫn có trạng thái HTTP 404 trên đó, không phải là 200. Điều này sẽ gây ra rất nhiều vấn đề với trình thu thập dữ liệu web. – chaos

0

Nếu tùy chọn MultiViews được kích hoạt hoặc bạn có thể thuyết phục bất cứ ai nắm giữ chìa khóa để kích hoạt nó, bạn có thể tạo ra một kịch bản gọi là Blog.php đó sẽ được thông qua yêu cầu example.com/Blog/foo và nhận được '/ foo' trong $_SERVER['PATH_INFO'].

+2

Anh ấy không thể. Anh ta không có quyền chỉnh sửa .htaccess. – Jet

+0

Vâng, tôi thấy điều đó ngay bây giờ. Đã chỉnh sửa cho mỗi. – chaos

3

Một cách khá đơn giản là:

  • khai báo một ErrorDocument 404 (ví dụ như PHP) trong .htaccess
  • phân tích truy vấn sử dụng $_SERVER và xem nếu nó tương ứng với kết quả bất kỳ
  • nếu có thì thay thế Trạng thái HTTP 404 với trạng thái 200 sử dụng header() và bao gồm index.php
+1

Câu hỏi, một lần nữa, trở thành, làm thế nào để làm điều đó w/o .htaccess. Tuy nhiên, một số máy chủ web cung cấp 404 tùy chỉnh trong cấu hình của chúng, do đó, điều này có thể thực hiện được. – Piskvor

+0

Phải. Tôi không thấy bất kỳ giải pháp nào mà không thể chọn (hoặc chỉnh sửa) Tài liệu Lỗi 404 của bạn hoặc sử dụng .htaccess, bởi vì bạn phải thiết lập mức này ở mức yêu cầu-hendling ... Hoặc sử dụng giải pháp bạn không như: 'index.php/Blog/...' –

7

Bạn cũng có thể có các url như

http://domain.com/index.php/Blog/Hello_World 

ra khỏi hộp với PHP5. Sau đó, bạn có thể đọc thông số URL bằng cách sử dụng

echo $_SERVER['PATH_INFO']; 

Nhớ xác thực/lọc PATH_INFO và tất cả các biến yêu cầu khác trước khi sử dụng chúng trong ứng dụng của bạn.

+1

Tôi biết kỹ thuật này. Tôi đã thay đổi câu hỏi yêu cầu một cách mà không có phương pháp này. Đó là một sự thay thế tuy nhiên, bạn nói đúng. Tôi chỉ không thích cái này. – Kriem

2

Cách duy nhất là sử dụng trang 404 tùy chỉnh. Bạn không có khả năng diễn dịch các tệp mở rộng bằng trình thông dịch PHP mà không cần định cấu hình lại các kiểu MIME của máy chủ web. Nhưng bạn nói rằng bạn không thể chỉnh sửa ngay cả .htaccess, vì vậy không có cách nào khác.

3

Nếu bạn bỏ qua dấu gạch chéo, Apache sẽ phân phối tệp thứ nhất [theo thứ tự bảng chữ cái] khớp với tên đó, bất kể đuôi mở rộng, ít nhất là trên 2 máy chủ tôi có quyền truy cập.

Tôi không biết làm thế nào bạn có thể sử dụng điều này để giải quyết vấn đề của bạn, nhưng nó có thể hữu ích tại một số điểm.

Ví dụ: nếu http://www.somesite.com/abc.htmlhttp://www.somesite.com/abc.php cả hai đều tồn tại và http://www.somesite.com/abc được yêu cầu, http://www.somesite.com/abc.html sẽ được phân phối.

+0

Bạn đang tham chiếu đến Tùy chọn 'MultiViews' trong apache. Tùy chọn này có thể có các tác dụng phụ không mong muốn. https://httpd.apache.org/docs/current/mod/mod_negotiation.html – Synox

1

Bạn có thể viết một lớp URI phân tích cú pháp URL thân thiện với người dùng mà bạn đã xác định.

5

Tôi biết câu hỏi này là rất cũ nhưng tôi không thấy bất cứ ai khác đề nghị giải pháp khả thi này ...

Bạn có thể nhận được rất gần với những gì bạn muốn chỉ bằng cách thêm một dấu hỏi sau khi một phần lĩnh vực URL, tức là;

http://www.example.com/?Blog/2009/12/10/ 
http://www.example.com/?Title_Of_This_Page 

Cả hai yêu cầu HTTP ở trên bây giờ sẽ được xử lý bởi cùng một tập lệnh PHP;

www.example.com/index.php 

và trong index.php script, $_SERVER['REQUEST_URI'] cho hai trang ở trên sẽ tương ứng;

Blog/2009/12/10/

Title_Of_This_Page

để bạn có thể xử lý chúng tuy nhiên bạn muốn.

+1

khá thú vị – emfi

Các vấn đề liên quan