簡體   English   中英

Htaccess - 刪除.php 擴展並保留查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM