我尝试将两种网址重定向到子域,将所有其他网址重定向到我的主域。 一个具体的例子:
"我的帐户"必须将以/ 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]
每个规则都是独立运作的,但如果我一起尝试所有这些规则,我就陷入了无限循环。
有人知道如何预防吗?
答案 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。似乎重写条件没有被正确识别,但仍无法找到原因......