如何在.htaccess中仅允许匹配单个正斜杠?
调整RewriteRule规则以仅匹配单斜杠结尾的URL
原规则:
RewriteRule ^([a-z]+)/$ index.php?lang=$1 [L,QSA]
问题:Apache的mod_rewrite默认会将请求中的多个连续斜杠合并为单个,导致/en//////////////这类多斜杠URL也会被匹配。
调整后的规则
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/([a-z]+)/\s RewriteRule ^([a-z]+)/$ index.php?lang=$1 [L,QSA]
规则解释
%{THE_REQUEST}变量保存浏览器发送的原始请求内容(比如GET /en/ HTTP/1.1),不会被Apache合并斜杠,通过它能精准匹配仅含单个结尾斜杠的URL。- 前置的
RewriteCond确保只有原始请求路径为/小写字母/格式的请求,才会进入后续RewriteRule处理。 - 保留原RewriteRule完成URL重写逻辑。
验证结果
- 预期匹配:
/en/→ 正常匹配并跳转至index.php?lang=en - 非预期匹配:
/en//////////////→ 不满足RewriteCond条件,不会被匹配
内容的提问来源于stack exchange,提问作者user_unknown
相关产品推荐
相关产品推荐

