.htaccess中RewriteCond配置错误,URL重定向失效求助
Apache Rewrite重定向规则失效排查
需求说明
需要将以下格式的URL重定向到上级目录:
- 需重定向:
https://kotrabatowy.pl/kod-rabatowy/*/test1、https://kotrabatowy.pl/kod-rabatowy/*/test2→ 目标:https://kotrabatowy.pl/kod-rabatowy/*/ - 需排除:末尾为3-4位数字的URL,如
https://kotrabatowy.pl/kod-rabatowy/*/123、https://kotrabatowy.pl/kod-rabatowy/*/1234
当前失效规则
RewriteCond %{REQUEST_URI} !^kod-rabatowy/([^/]+)/[0-9]{3,4}/$ RewriteRule ^kod-rabatowy/([^/]+)/([^/]+)/$ kod-rabatowy/$1/ [R=301,L,NC]
问题原因
- REQUEST_URI格式不匹配:
%{REQUEST_URI}的值默认以/开头,但规则中未包含开头的/,导致排除条件永远成立,无法过滤掉末尾为数字的URL。 - 结尾斜杠限制过严:原规则仅匹配末尾带斜杠的URL,实际访问中可能存在不带斜杠的请求,导致部分场景不触发重定向或排除规则失效。
修正后的规则
# 排除末尾为3-4位数字(兼容带/不带斜杠)的请求 RewriteCond %{REQUEST_URI} !^/kod-rabatowy/([^/]+)/[0-9]{3,4}/?$ # 匹配目标URL并重定向到上级目录 RewriteRule ^kod-rabatowy/([^/]+)/([^/]+)/?$ kod-rabatowy/$1/ [R=301,L,NC]
修正要点
- 给
REQUEST_URI的正则开头添加/,匹配真实请求路径的格式。 - 在正则末尾添加
/?,同时兼容带斜杠和不带斜杠的URL场景。 - 保留
R=301永久重定向、L终止后续规则、NC忽略大小写的标记。
内容的提问来源于stack exchange,提问作者Miłosz
相关产品推荐
相关产品推荐

