2

由于营销原因,我使用一些虚荣 URL 来进行更友好的访问,并跟踪一些活动。不幸的是,我被困在使用 cPanel 的托管专用服务器上,这些是我编写规则所采取的步骤:

  • 首先,我在我的 cPanel 中添加了xyz.comefg.com停放的域
  • 然后我写了RewriteRule我需要的所有s

.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]

现在,问题是如果我尝试访问www.efg.com/signdirections,我将被重定向到该www.xyz.com/signredirections版本,而不是 efg 的版本。

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

4

2 回答 2

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条规则。
  • 确保在新浏览器中测试它以避免旧浏览器缓存。
于 2014-11-21T11:57:02.833 回答
0

我不知道,如果这可能是一个糟糕的测试后的缓存错误:
浏览器缓存 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

于 2014-11-21T11:59:08.097 回答