2012-03-09 30 views
9

Tôi có ghi đè sau đây trong tệp .htaccess của tôi, loại bỏ đuôi .php khỏi tệp, chuyển đổi ví dụ so.com/question.php thành so.com/ câu hỏi.Xóa phần mở rộng .php bằng .htaccess mà không vi phạm DirectoryIndex

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

Tuy nhiên điều này cũng phá vỡ hành vi DirectoryIndex mặc định, trong đó chỉ cần nhập thư mục sẽ chuyển hướng đến tệp chỉ mục trong thư mục, ví dụ: so.com/answer màn so.com/answer/index.php

Đơn giản chỉ cần kết hợp các mã trên với DirectoryIndex index.php không đạt được cả hai kết quả.

Ai đó có thể giúp tôi kết hợp hai chức năng này hoặc viết lại mã để loại trừ tệp index.php, điều này có thể đạt được kết quả tương tự không?

Trả lời

24

Tôi đang nghĩ đến bạn chỉ cần xác minh rằng các tập tin tồn tại trước khi thực hiện việc viết lại, như vậy bạn sẽ để lại 404 và hành vi DirectoryIndex nguyên vẹn:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [NC,L] 

(không kiểm tra)

+0

Hoạt động hoàn hảo, cảm ơn bạn. – ajcw

+0

@ Timothée Groleau mã đẹp, có tùy chọn nào để xóa 'index.php' cho trang chủ không? – Muhammed

+0

cảm ơn bạn đời, điều này hoạt động như một nét duyên dáng :) – jycr753

2
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L, QSA] 

xác minh tệp và thư mục và cũng có thể thêm RewriteBase/

+1

Phần này cung cấp Lỗi Máy chủ Nội bộ: ( – ajcw

+0

lạ ... bạn cũng thêm vào? :) – Crsr

+0

Có, Tôi bao gồm 'RewriteEngine On' :) – ajcw

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