2012-09-01 20 views
5

Tôi đã cố gắng xóa các tiện ích mở rộng PHP khỏi trang web của mình. Khi người dùng yêu cầu một tệp PHP, PHP sẽ bị xóa và người dùng sẽ được chuyển hướng và khi người dùng nhập vào một URL không có PHP, tệp PHP thực tế sẽ được phân phối. Điều này làm việc tốt trừ khi có tham số GET trong URL. Các quy tắc của tôi như sau:Làm thế nào để sử dụng Apache Mod_rewrite để loại bỏ phần mở rộng php, trong khi vẫn giữ các tham số GET?

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

# remove trailing slash ONLY if it is not an existing folder 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# rewrite to FILENAME.php if such file does exist and is not a folder 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ /$1.php [L,QSA] 

Tôi nghĩ rằng điều này đã có thể xóa php ngay cả khi có tham số GET, nhưng không thành công. Tôi cũng đã thử một cái gì đó như thế này:

RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA] 

Nó cũng không hoạt động, php vẫn còn đó. Nhưng nếu tôi cố gắng:

RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA] 

tức, loại bỏ các RewriteCond, phần mở rộng php được loại bỏ và các thông số đã được bảo quản, nhưng trang sẽ không được phục vụ như là trình duyệt cho biết có quá nhiều chuyển hướng.

Bất kỳ ai có ý tưởng vui lòng?

Trả lời

0

Bạn có thể muốn sử dụng tham số %{QUERY_STRING} được ghi lại here.

Đọc hữu ích herehere.

2

Cảm ơn bạn SteAp cho câu trả lời của bạn. Tôi đã xảy ra để có thể tìm ra một cách để đối phó với nó ngay bây giờ, và muốn chia sẻ ở đây trong trường hợp những người khác chạy vào các vấn đề tương tự.

Trong quy tắc của tôi, tôi có

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

Để thực hiện chuyển hướng bên ngoài khi người dùng yêu cầu một file PHP. RewriteCond ở đây là để ngăn chặn vòng lặp chuyển hướng - tức là chuyển hướng vô tận do viết lại nội bộ không chính xác và chuyển hướng bên ngoài (xoá php, sau đó thêm php, sau đó xóa lại, ...)

Khi có tham số, tiêu đề thực như http://domain.com/file.php? .... HTTP/1.1 Một cái gì đó như thế này, do đó, các mô hình trong RewriteCond sẽ không hoạt động vì nó không đưa các thông số vào tài khoản.

Để giải quyết nó, bạn chỉ cần thay thế mã trên với:

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php(.*)\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

Bằng cách đó, các thông số có thể được kết hợp bởi các mô hình, và bây giờ mọi thứ hoạt động.

Hy vọng điều này sẽ giúp một người nào đó có vấn đề tương tự

+0

trong RewriteRule (hoặc là nó chỉ là một Noob như tôi lol?):/$ 1 tạo url bị hỏng, sử dụng $ 1 với từng lần ra / – StefanoCudini

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