Htaccess正则表达式:排除REQUEST_URI

时间:2015-06-16 17:40:54

标签: regex apache .htaccess mod-rewrite redirect

我真的尝试了所有东西,工具htaccess tester说没关系,但它并没有真正起作用。

仅当REQUEST_URI不以3个特定字符串开头时,我才想将子域重定向到主域。

我尝试过没有成功:

RewriteCond %{HTTP_HOST} ^sub.example.com$ [NC]
RewriteCond %{REQUEST_URI} !(aaa|bbb|ccc)
RewriteCond %{REQUEST_URI} !^/?$
RewriteRule ^(.*)$ http://www.example.com%{REQUEST_URI} [R=301,NC,L,QSA]

我想要那个:

  • http://sub.example.com(不应重定向) - > http://sub.example.com |行
  • http://sub.example.com/aaa/sss(不应重定向) - > http://sub.example.com/aaa/sss | KO(重定向到http://www..。)
  • http://sub.example.com/zzz/xxx(应重定向) - > http://www.example.com/zzz/xxx |行

由于

1 个答案:

答案 0 :(得分:2)

请尝试使用此规则:

RewriteCond %{HTTP_HOST} ^sub\.example\.com$ [NC]
RewriteCond %{THE_REQUEST} !\s/+(aaa|bbb|ccc)/ [NC]
RewriteRule . http://www.example.com%{REQUEST_URI} [R=301,L,NE]

清除浏览器缓存后进行测试。

使用THE_REQUEST代替REQUEST_URI来确保我们使用Apache收到的未更改的URI值。