htaccess重写 - 重定向到另一个子域是循环

时间:2014-07-21 17:51:41

标签: .htaccess subdomain rewriting

我尝试将两种网址重定向到子域,将所有其他网址重定向到我的主域。 一个具体的例子:

  • "我的帐户"必须将以/ my-account / *和订阅页面开头的页面重定向到https://my-account.domaim.com。必须保留uri。

  • 所有其他内容如/ news或主页必须仅在www.domain.com上查看

这是我到现在为止所尝试的:

# All urls except my-account/* and subscription are redirected to the main domain
RewriteCond %{HTTP_HOST} ^my-account\.domain\.(.+)$
RewriteCond %{REQUEST_URI} !^my-account/ 
RewriteCond %{REQUEST_URI} !^subscription$ 
RewriteRule ^(.*)$ http://www.domain.%1/$1 [L,QSA,R=301]

# subscription page is redirected to my-account subdomain   
RewriteCond %{HTTP_HOST} ^www\.domain\.(.+)$
RewriteRule ^subscription$ https://my-account.domain.%1/subscription[L,QSA,R=301]

# All my-account/* pages are redirected to my-account subdomain
RewriteCond %{HTTP_HOST} ^www\.domain\.(.+)$
RewriteRule ^my-account/(.*)$ https://my-account.domain.%1/my-account/$1 [L,QSA,R=301]  

每个规则都是独立运作的,但如果我一起尝试所有这些规则,我就陷入了无限循环。

有人知道如何预防吗?

2 个答案:

答案 0 :(得分:0)

规则看起来不错,但您的第二条规则中缺少空格:

RewriteRule ^subscription$ https://my-account.domain.%1/subscription[L,QSA,R=301]
#  -----------------------------------------------------------------^

但您可以将它们组合成一个规则:

RewriteCond %{HTTP_HOST} ^www\.domain\.(.+)$
RewriteRule ^(subscription|my-account/.*)$ https://my-account.domain.%1/$1 [L,QSA,R=301]

另外,请确保在测试时清除缓存,因为301重定向是永久性的,浏览器会缓存它们。

答案 1 :(得分:0)

感谢您的回答! 拼写错误来自我的复制/粘贴,组合有效,但不会改变其他规则的问题。我保留它以供日后使用;)

我尝试了这样的反向规则:

#RewriteCond %{HTTP_HOST} !^my-account\.domain\.(.+)$ [NC] 
#RewriteCond %{REQUEST_URI} ^/subscription$  [OR]
#RewriteCond %{REQUEST_URI} ^/my-account/  [NC] 
#RewriteRule ^(.*)$ https://my-account.domain.%1/$1 [L,R=301]

它也有效,但不与其他组合。它不再循环但是如果我尝试像http / www.domain.com / subscription这样的东西我被重定向到www.domain.com并且截断了url。似乎重写条件没有被正确识别,但仍无法找到原因......