使用.htaccess实现PHP自定义页面美化URL时出现post_url未定义索引错误
美化URL Rewrite规则失效排查方案
第一步:修正现有RewriteRule错误
你当前的配置存在3个明显问题:
- 第二条规则的正则表达式存在语法错误,
[a-zA-Z-0-9-]中减号放在字符集中间会被识别为区间符,同时重复声明了减号 - 两条规则拆分完全没必要,完全可以合并为一条同时适配带/不带尾斜杠的请求
- 缺少必要的规则标记,且没有关闭Apache的MultiViews内容协商功能,很容易出现Apache直接将
post/xxx请求映射到post.php,跳过重写逻辑,导致参数无法传递
修正后的完整.htaccess配置如下:
RewriteEngine On # 关闭内容协商,避免跳过重写规则 Options -MultiViews # 规则适配带/不带尾斜杠的请求,QSA保留原有请求参数,L表示匹配后停止后续规则处理 RewriteRule ^post/([a-zA-Z0-9-/]+)/?$ post.php?post_url=$1 [QSA,L]
第二步:确认服务端配置支持重写
- 检查Apache是否已开启
mod_rewrite模块 - 检查站点目录配置中
AllowOverride参数是否设置为All,否则.htaccess文件不会生效 - 如果你的项目放在站点子目录下,需要额外添加RewriteBase配置,比如项目放在
/blog目录下就加:RewriteBase /blog/
第三步:PHP端调试验证参数传递
在post.php顶部添加临时调试代码,确认参数传递情况:
<?php // 打印所有GET参数 print_r($_GET); // 打印服务端变量,排查是否有重命名后的参数(比如REDIRECT_post_url) print_r($_SERVER); ?>
如果能看到REDIRECT_post_url变量,说明重写已生效,只是Apache对重写后的参数做了重命名,可以直接用$_REQUEST['post_url']取值,或者调整重写规则即可。
内容的提问来源于stack exchange,提问作者Makhety
相关产品推荐
相关产品推荐

