如何设置RewriteCond限定%{REQUEST_URI}仅包含特定字符?
.htaccess规则优化方案
你当前添加的条件RewriteCond %{REQUEST_URI} ^/([a-z0-9]+)存在缺陷——它仅验证了URI开头的部分,无法阻止后续出现非a-z0-9的字符(比如/abc!123这类包含特殊字符的请求也会匹配该条件),无法满足“仅包含a-z或0-9拉丁字符”的要求。
以下是两种更严谨的实现方案,可根据你的路径需求选择:
方案一:允许多级路径(如/abc/123、/abc/)
直接通过强化RewriteRule的匹配模式来限制路径字符,无需额外条件:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([a-z0-9]+)(/[a-z0-9]+)*/?$ /folder/file.php?fldr=$1 [NC,L,QSA]
- 模式
^([a-z0-9]+)(/[a-z0-9]+)*/?$确保整个路径仅由a-z0-9字符和必要斜杠组成,末尾斜杠可选 [NC]参数忽略大小写,兼容大写字母请求
方案二:仅允许单段路径(如/abc、/abc/)
同样通过RewriteRule模式限制,更简洁:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([a-z0-9]+)/?$ /folder/file.php?fldr=$1 [NC,L,QSA]
- 模式
^([a-z0-9]+)/?$仅匹配单个a-z0-9字符段,末尾斜杠可选
如果坚持使用REQUEST_URI条件验证,可采用以下写法(以允许多级路径为例):
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} ^/[a-z0-9]+(/[a-z0-9]+)*/?$ [NC] RewriteRule ^([a-z0-9]+)/?(.*)$ /folder/file.php?fldr=$1 [NC,L,QSA]
内容的提问来源于stack exchange,提问作者Mm-Art-In
相关产品推荐
相关产品推荐

