子目录中.htaccess重写规则返回错误参数,如何修正?
问题原因及解决办法
你的重写规则陷入了循环重写,导致最终id被替换成了page.php:
- 当访问
https://www.example.com/subfolder/ddd时,规则将请求重写为page.php?id=ddd - Apache重写引擎会继续检查新生成的URI(
page.php)是否匹配规则,而page.php完全符合^(.*)$的匹配模式 - 于是规则再次触发,将
page.php重写为page.php?id=page.php,最终输出这个结果
解决办法(任选其一)
方案1:排除真实存在的文件
添加条件,仅当请求的路径不是真实存在的文件时才执行重写:RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ page.php?id=$1 [L]方案2:直接排除
page.php
修改规则,明确不匹配page.php本身:RewriteEngine on RewriteRule !^page\.php$ page.php?id=$0 [L]方案3:使用
END标志(Apache 2.4+)
用END替代L,一旦完成重写就停止所有后续的重写处理,彻底避免循环:RewriteEngine on RewriteRule ^(.*)$ page.php?id=$1 [END]
内容的提问来源于stack exchange,提问作者oyvey
相关产品推荐
相关产品推荐

