重定向与特定路径不匹配的流量

时间:2013-01-08 09:46:57

标签: regex .htaccess redirect

我有一个不再使用的旧网站,需要将流量重定向到其他地方。我遇到的一个问题是,网站的某个特定区域需要保持可用,以支持从网站购买商品的先前客户。

我想用.htaccess这样做,但我的正则表达式知识非常有限。

基本上我想重定向所有没有支持路径的站点请求(最后可以有其他段):

http://www.example.com/support
http://www.example.com/support/contact
http://www.example.com/support/ticket

但是,以下示例(两个中的两个)应重定向到新站点:

http://www.example.com
http://www.example.com/projects

到目前为止,我只想弄清楚如何使用以下方法重定向请求,而不使用其他参数:

RewriteRule ^$ http://www.newsite.com/ [L,R=301]

我知道我需要的基本上是这样的:

IF url does not contain www.example.com/support
THEN redirect

我只是不知道怎么用regex / .htaccess写它

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用mod_rewrite指令更容易,例如:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteCond %{REQUEST_URI}  !/support/?   [NC]
RewriteRule  ^(.*)$    http://www.newsite.com/$1    [L,R=301,QSA]

答案 1 :(得分:1)

Apache mod_rewritegreat documentation。这真的值得一读。

在您的特殊情况下,为避免重定向以support开头的所有路径,您可以使用RewriteCond指令,即:

RewriteCond %{REQUEST_URI} !^/support
RewriteRule ^(.*) http://www.newsite.com/$1 [L,R=301]

答案 2 :(得分:0)

试试这个:

RewriteRule ^(support/?.*)$ $1 [L]
RewriteRule ^(.*)$ http://www.newsite.com/$1 [L,R=301]

第一个将您的support/请求“转发”到support/...并完成RewriteRules的处理。第二个应该将所有其他查询转发到新网站。