.htaccess重写异常:部分URL被自动添加.php后缀而非移除
解决.htaccess URL重写异常问题
我来帮你捋清楚问题出在哪,再给你针对性的解决办法:你的第二个RewriteRule正则没有考虑到请求末尾带斜杠的情况(比如/account/servers/),同时第一个规则缺少必要限制,导致当第二个规则匹配失败时,第一个规则错误地把二级路径里的servers当成根目录下的请求,最终出现account/servers.php/这种异常重写结果。
直接替换成下面的.htaccess代码即可解决问题:
RewriteEngine On # 处理根目录下的请求(比如 /contact → contact.php),仅当对应PHP文件存在且不是目录时生效 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^/?([a-z]+)/?$ $1.php [NC,L] # 处理account子路径,支持末尾带/或不带/的请求 RewriteRule ^account/([0-9a-zA-Z]+)/?$ account.php?$1 [NC,L]
给你拆解下修改的核心点:
- 第一个规则新增两个条件:
%{REQUEST_FILENAME} !-d:确保请求的不是真实存在的目录,避免干扰正常目录访问%{REQUEST_FILENAME}.php -f:只有当对应的xxx.php文件实际存在时才执行重写,防止无效请求触发错误重写- 正则调整为
^/?([a-z]+)/?$:允许请求末尾带斜杠或不带,加上L标志保证匹配后立即停止,不会触发后续规则
- 第二个规则的正则改为
^account/([0-9a-zA-Z]+)/?$:不管访问/account/servers还是/account/servers/,都能正确匹配到servers参数并转发到account.php?servers,L标志同样避免后续规则干扰
修改后再访问/account/servers/,就能正常解析到account.php的参数,不会再出现异常重写的情况了。
内容的提问来源于stack exchange,提问作者floreich
相关产品推荐
相关产品推荐

