2014-11-21 44 views
2

由于市场营销的原因,我使用了一些虚名网址进行友好访问,并跟踪了一些活动。不幸的是,我坚持有管理的专用服务器,与的cPanel上,而这些都是我把写我的规则的步骤:按照RewriteRules的执行顺序执行问题

  • 首先,我在的cPanel添加xyz.comefg.com到停放的域名
  • 然后我写的一切,我需要的RewriteRule小号

的.htaccess

RewriteCond %{HTTP_HOST} ^xyz\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.xyz\.com$ 
RewriteRule ^signdirections$ "http\:\/\/xyz\.abc\.com\/en?utm_source=signdirections&utm_medium=advert&utm_campaign=xyz" [R=301,L] 


RewriteCond %{HTTP_HOST} ^efg\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.efg\.com$ 
RewriteRule ^signdirections$ "http\:\/\/efg\.abc\.com\/en?utm_source=signdirections&utm_medium=advert&utm_campaign=efg" [R=301,L] 
现在3210

,问题是,如果我尝试访问www.efg.com/signdirections,我会重定向到www.xyz.com/signredirections版本,而不是EFG的一个。

任何想法,为什么这是怎么回事?我的直觉是,它检测到相同的主机名(HTTP_HOST),但我不明白为什么。

+0

您没有其他规则导致重定向? – hjpotter92 2014-11-21 11:47:05

+0

@ hjpotter92还有更多的重定向规则,但冲突只是在不同的主机上有重复的RewriteRules(例如:signdirections) – Alex 2014-11-21 14:46:59

回答

2

最有可能是由于你的其他规则发生。最好使用THE_REQUEST在应用其他规则后不会更改的变量。

您也可以既您的规则组合成一个:

RewriteCond %{HTTP_HOST} ^(?:www\.)?(xyz|efg)\.com$ [NC] 
RewriteCond %{THE_REQUEST} /signdirections [NC] 
RewriteRule . http://%1.abc.com/en?utm_source=signdirections&utm_medium=advert&utm_campaign=%1 [R=301,L,NE,QSA] 
  • 确保这是下面RewriteEngine On线的第一条规则。
  • 请务必在新浏览器中测试它以避免旧的浏览器缓存。
+0

实际上,它仍然没有这样做:\ – Alex 2014-11-26 17:49:25

+0

确定在您的问题中粘贴最新的.htaccess。它 – anubhava 2014-11-26 17:51:15

+0

部分,而在另一推荐运行http://pastebin.com/hFfNtuLx – Alex 2014-11-26 17:55:13

0

我不知道,如果能够在糟糕的测试之后是一个高速缓存错误:
How long do browsers cache HTTP 301s?

只是一个简化版本:

RewriteCond %{HTTP_HOST} ^(?:www\.)?xyz\.com$ 
RewriteRule ^signdirections$ http://xyz.abc.com/en?utm_source=signdirections&utm_medium=advert&utm_campaign=xyz [R=302,L] 

RewriteCond %{HTTP_HOST} ^(?:www\.)?efg\.com$ 
RewriteRule ^signdirections$ http://efg.abc.com/en?utm_source=signdirections&utm_medium=advert&utm_campaign=efg [R=302,L] 

与R = 302试,当一切正常,更改为R = 301