提问人:Adir 提问时间:1/7/2023 最后编辑:RavinderSingh13Adir 更新时间:1/8/2023 访问量:120
Htaccess - 删除 .php 扩展名并保留查询
Htaccess - remove .php extension and keep query
问:
我试图删除扩展并保留查询参数,但我收到 404 错误。.php
id
这是 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
答:
1赞
MrWhite
1/7/2023
#1
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L]
这将在内部重写 URL 从 to ,这显然会导致 404。最好测试相应的文件是否存在,而不是测试请求是否尚未映射到文件。/folder/file/123
/folder/file/123.php
.php
我假设 URL 参数始终采用数值。q
请尝试以下操作:
# 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
此规则没有意义,并且是多余的。
1赞
anubhava
1/7/2023
#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]
评论
/folder/file/123
.htaccess
.htaccess
/folder/file