[英]Htaccess - remove .php extension and keep query
我試圖刪除.php
擴展名並保留id
查詢參數,但出現 404 錯誤。
這是 URL:
example.com/folder/file.php?q=123
我希望它是:
example.com/folder/file/123
這是我的.htaccess
文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^$1/(.*)$ /$1.php?q=$2
RewriteCond %{REQUEST_FILENAME}.-f RewriteRule ^([^\.]+)$ $1,php [NC,L]
這將在內部將 URL 從/folder/file/123
重寫為/folder/file/123.php
,這顯然會導致 404。最好測試相應的.php
文件是否存在,而不是測試請求還沒有 map 到一個文件。
我假設q
URL 參數始終采用數值。
請嘗試以下操作:
# Rewrite "/folder/<file>/<123>" to "/folder/<file>.php?q=<123>"
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^.]+)/(\d+)$ $1.php?q=$2 [L]
不需要NC
標志。
RewriteRule ^$1/(.*)$ /$1.php?q=$2
這條規則沒有意義而且是多余的。
假設最后一個路徑組件生成查詢參數q
,您可以使用此規則:
RewriteEngine On
# ignore all files and directories from rewrite
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Add .php extension and use last component as parameter q
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+)/([\w-]+)/?$ $1.php?q=$2 [L,QSA]
# Add .php extension
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.