如何将带GET参数的article.php URL自动重定向至友好URL?
实现旧URL自动重定向到友好URL
当然可以搞定这个问题!你现在的规则只实现了友好URL到实际脚本的内部重写,但还没处理反向的重定向——也就是当用户直接访问带参数的旧URL时,自动跳转到友好版本。这样既可以统一站点的URL入口,对SEO也更友好。
完整的Rewrite规则配置
RewriteEngine On # 第一步:将旧的带参数URL永久重定向到友好URL RewriteCond %{THE_REQUEST} ^GET\ /article\.php\?name=([a-z,-]+)\s [NC] RewriteRule ^ /article/%1? [R=301,L] # 第二步:将友好URL内部重写为实际的PHP脚本 RewriteRule ^article/([a-z,-]+)$ article.php?name=$1 [L]
规则详解
重定向规则部分:
%{THE_REQUEST}:捕获用户发起的原始HTTP请求行(比如GET /article.php?name=xyz HTTP/1.1),用这个变量判断可以避免内部重写触发重定向循环。^GET\ /article\.php\?name=([a-z,-]+)\s:匹配GET请求中访问article.php且带name参数的情况,并用括号捕获参数值(只匹配小写字母、连字符)。[NC]表示忽略大小写,如果你的name值包含大写字母,可以保留这个标记,或者把正则改成[a-zA-Z,-]+。RewriteRule ^ /article/%1? [R=301,L]:将请求重定向到友好URL,%1对应前面捕获的参数值;末尾的?用于清除原URL的查询字符串;R=301是永久重定向(适合正式环境,利于搜索引擎收录),测试阶段可以改成R=302临时重定向;L表示处理完这条规则后停止后续规则的执行。
内部重写规则部分:
基于你原来的规则做了小调整,去掉了末尾多余的&,用[L]标记确保这是最后一条处理规则,将友好URL映射到实际的PHP脚本。
注意事项
- 测试阶段建议先用
R=302临时重定向,确认跳转正常后再改成R=301永久重定向,因为301重定向会被浏览器缓存。 - 确保正则表达式
[a-z,-]+覆盖了你所有可能的name参数值,如果有其他字符(比如数字),需要扩展正则,比如改成[a-z0-9,-]+。 - 不要重复写
RewriteEngine On,只需要在规则最开头声明一次即可。
内容的提问来源于stack exchange,提问作者mk27
相关产品推荐
相关产品推荐

