如何修改.htaccess规则去除多余URL段避免500错误并重定向到对应文章
.htaccess重写规则调整方案
你当前使用的规则RewriteRule ^/?news/([^/]+)/?$ article.php?slug=$1 [L,QSA]仅能匹配/news/后仅含1层路径段的URL,无法适配带额外后缀路径的旧链接。出现500错误一般是多余路径触发了重写循环,或是未匹配规则后触发了错误的资源寻址逻辑,可按照需求选择以下两种调整方案:
方案1:旧链接301重定向到标准文章URL(推荐,SEO友好)
该方案会自动将/news/post-1/comment-page-1这类带额外路径的地址跳转到标准的/news/post-1/格式,统一URL格式避免权重分散:
# 匹配所有带额外路径的新闻地址,301跳转到标准格式 RewriteRule ^/?news/([^/]+)/.+$ /news/$1/ [R=301,L,QSA] # 原有规则保留,处理标准路径到内部脚本的重写 RewriteRule ^/?news/([^/]+)/?$ article.php?slug=$1 [L,QSA]
方案2:无跳转直接返回文章内容
如果不需要修改地址栏内容,希望访问旧路径时地址保持不变,直接用以下规则替换原有规则即可:
RewriteRule ^/?news/([^/]+)(/.*)?$ article.php?slug=$1 [L,QSA]
正则末尾新增的(/.*)?会匹配/[slug]后出现的任意路径(包括无额外路径的情况),无论后面加多少层路径都能正确提取slug参数。
注意事项
- 调整规则后请清空浏览器缓存再测试,避免301永久重定向的本地缓存影响测试结果
- 如果仍出现500错误,可检查htaccess中是否存在其他顺序靠前的重写规则冲突,将本条规则调整到其他通用规则之前即可
内容的提问来源于stack exchange,提问作者ramenknight
相关产品推荐
相关产品推荐

