【问题标题】:htaccess Redirect only if the HTTP referrer does NOT equal something仅当 HTTP 引荐来源不等于某些东西时,htaccess 才重定向
【发布时间】:2012-08-24 10:52:57
【问题描述】:

我有以下规则可以将中国用户重定向到网站的中文版本:

  RewriteCond %{HTTP:Accept-Language} ^zh [NC]
  RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
  RewriteRule ^(.*)$ http://ch.example.com/$1 [L,R=301]

  RewriteCond %{HTTP:Accept-Language} ^zh [NC]
  RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  RewriteRule ^(.*)$ http://ch.example.com/$1 [L,R=301]

这很好用。

但是,有一个链接可以将他们带回到网站的英文版本,这只是普通域 (www.example.com)。

但这只是将他们直接重定向回中文网站,因为它符合规则。所以我需要这样做,只有当引用者不是 ch.example.com 时才会触发上述规则。

我尝试过这样的事情:

  RewriteCond %{HTTP:Accept-Language} ^zh [NC]
  RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
  RewriteCond %{HTTP_REFERER} !^http?://ch\.example\.com/ [nc]
  RewriteRule ^(.*)$ http://ch.example.com/$1 [L,R=301]

但它不起作用。

【问题讨论】:

    标签: .htaccess mod-rewrite http-referer http-accept-language


    【解决方案1】:

    当用户在英文网站上查看他们的第二个页面时,它会重定向到中文。更好的方法是设置一个cookie然后检查它:

    例如:http://www.askapache.com/htaccess/htaccess-fresh.html#Set_Cookie_based_Requested_directory

    【讨论】:

    • 好点。但是我们应该能够检查一下推荐是否来自 ggvc.com,然后不会重定向,对吗?所以,像这样的事情(即使这不起作用) RewriteCond %{HTTP:Accept-Language} ^zh [NC] RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteCond %{HTTP_REFERER} !^ch\.example\.com/ [NC] RewriteCond %{HTTP_REFERER} !^www\.example\.com/ [NC] RewriteCond %{HTTP_REFERER} !^example\.com/ [ NC] 重写规则 ^(.)$ ch.example.com/$1 [L,R=301]
    • HTTP_REFERER 不应被依赖:“并不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 的能力作为一项功能。简而言之,它不能真正被信任。”
    • 不如将指向英文网站的链接设置为指向设置 cookie 然后重定向到英文网站的页面。
    • 如果它不能被信任也没关系,我只是想让它为大多数用户工作,其中大多数是非技术用户,并且使用 IE。
    • 好的,试试这个:RewriteCond %{HTTP_REFERER} !^https?://ch\.example\.com [NC]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2016-02-09
    相关资源
    最近更新 更多