htaccess文件重写规则不生效无法实现预期URL美化效果该如何修复?
故障原因
你的重写规则存在两个核心问题:
- 规则顺序错误:通用去PHP后缀的规则优先级高于自定义参数规则,请求
edicionpelicula=7时会先被^([^\.]+)$规则匹配,直接重写为edicionpelicula=7.php,且[L]标记会终止后续规则执行,你的参数规则完全不会触发。 - 原自定义规则未添加
QSA标记,若后续有额外查询参数会被丢弃。
修复后的完整.htaccess配置
Options +FollowSymLinks RewriteEngine On # 优先处理自定义参数映射规则 RewriteRule ^edicionpelicula=([0-9]+)$ edicionpelicula.php?id=$1 [L,QSA] # 处理PHP后缀去除通用规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\.]+)$ $1.php [NC,L]
配置说明
- 调整规则顺序:特殊参数规则放在通用规则前,优先匹配特殊场景
- 新增
QSA标记:支持自动拼接额外查询参数,例如访问edicionpelicula=7?test=1会映射到edicionpelicula.php?id=7&test=1 - 保留原文件/目录存在性判断条件,不会影响真实静态资源、目录的访问
注意事项
- 如果你的
.htaccess放在站点根目录而非ejemplo子目录下,需要调整路径前缀:RewriteRule ^ejemplo/edicionpelicula=([0-9]+)$ /ejemplo/edicionpelicula.php?id=$1 [L,QSA] - 修改配置后需清理浏览器缓存、重启Apache服务再测试,需确保Apache已开启rewrite模块,且站点配置中
AllowOverride设置为All
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

