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?
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