0

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

  • 以 /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]  

每个规则都独立工作,但如果我一起尝试所有规则,我就会陷入无限循环。

有人知道如何预防吗?

4

2 回答 2

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 被截断。似乎重写条件没有被正确识别,但仍然找不到原因......

于 2014-07-22T13:24:37.733 回答
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 重定向是永久性的,浏览器会缓存它们。

于 2014-07-21T18:06:52.100 回答