2014-11-21 43 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