使用.htaccess为PHP实现URL重写:双参数动态URL转层级路径问题求解
.htaccess URL重写规则调整方案
正确重写规则
如果你的目标访问路径是根路径层级的example.com/12345/xyz,使用以下配置:
RewriteEngine On # 先匹配双参数路径:/12345/xyz 或 /12345/xyz/ RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9-]+)/?$ post.php?id=$1&title=$2 [L,QSA] # 再匹配单参数路径:/12345 或 /12345/ RewriteRule ^([a-zA-Z0-9]+)/?$ post.php?id=$1 [L,QSA]
如果需要保留/post/前缀(访问路径为example.com/post/12345/xyz),修改为以下配置即可:
RewriteEngine On # 双参数带post前缀 RewriteRule ^post/([a-zA-Z0-9]+)/([a-zA-Z0-9-]+)/?$ post.php?id=$1&title=$2 [L,QSA] # 单参数带post前缀 RewriteRule ^post/([a-zA-Z0-9]+)/?$ post.php?id=$1 [L,QSA]
规则说明
- 规则顺序必须先写双参数匹配,再写单参数匹配,否则短路径规则会优先触发,导致第二个参数丢失
- 分组正则移除了
/符号,避免单个分组吃掉整个路径段,实现两个参数的拆分 - 末尾的
/?$表示路径末尾的斜杠可选,兼容带/和不带/的访问场景 [L]标识匹配成功后不再执行后续规则,避免规则冲突[QSA]标识自动保留原请求附带的额外查询参数,如有需要可以移除
验证方式
配置生效后,在post.php中可以直接通过$_GET['id']获取id值,$_GET['title']获取title值。
注意:需要确认Apache已经开启
mod_rewrite模块,且站点配置中的AllowOverride设置为All,否则.htaccess规则不会生效。
内容的提问来源于stack exchange,提问作者Anirudh Singh
相关产品推荐
相关产品推荐

