如何在.htaccess中为以dira为首个子目录的URL设置环境变量
.htaccess中匹配首个子目录设置环境变量的正确规则
需求
当URL的首个子目录为dira时,将环境变量myvar设置为123。
需要生效的URL
test.com/dira test.com/dira/ test.com/dira/b test.com/dira/b/ test.com/dira/b/random.html test.com/dira/b/2 test.com/dira/b/2/ test.com/dira/b/2/and-so-in-into-infinity
需要忽略的URL
test.com test.com/ test.com/dirb test.com/dirc/123/456/789/blah test.com/123/dira/ test.com/dirz/
尝试过的无效规则
RewriteRule ^dira(.*)$ [E=myvar:123] RewriteRule ^dira/(.*)$ [E=myvar:123] RewriteRule ^dira/? [E=myvar:123] RewriteRule ^dira/?$ [E=myvar:123]
正确解法
你之前的规则要么仅匹配dira本身或带斜杠的单一情况,要么没覆盖后续任意层级的路径。正确规则需要同时适配dira开头、带/不带斜杠、以及后续任意内容的场景,还要确保基础配置正确:
- 先开启Rewrite引擎(如果未添加):
RewriteEngine On
- 添加正确的Rewrite规则:
RewriteRule ^dira(/.*)?$ - [E=myvar:123,L]
规则说明
^dira:匹配URL路径以dira开头(/.*)?:可选分组,匹配斜杠/加任意后续内容,?表示该分组可出现0次或1次,同时覆盖dira本身和dira/xxx这类多级路径-:表示不修改URL路径,仅执行设置环境变量的操作[E=myvar:123]:设置环境变量myvar的值为123L:标记为最后一条规则,避免后续规则覆盖当前设置的环境变量
注意:把这条规则放在其他Rewrite规则之前,防止被提前拦截匹配。
内容的提问来源于stack exchange,提问作者B.T.
相关产品推荐
相关产品推荐

