.htaccess HttAccess仅在HTTP引用不等于某个值时重定向

.htaccess HttAccess仅在HTTP引用不等于某个值时重定向,.htaccess,mod-rewrite,http-referer,http-accept-language,.htaccess,Mod Rewrite,Http Referer,Http Accept Language,我有以下规则将中国用户重定向到该网站的中文版本: 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_H

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

  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)

但这只是将他们直接重定向回中国网站,因为这符合规则。因此,我需要使上述规则仅在referer不是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]

但是它不起作用。

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


例如:

好的观点。但我们应该能够检查一般情况下,如果转介是从ggvc.com在所有,然后不重定向,对吗?所以,像这样的事情(即使这不起作用)重写cond%{HTTP:Accept Language}^zh[NC]RewriteCond%{HTTP\u HOST}^www\.example\.com$[NC]RewriteCond%{HTTP\u REFERER}!^\。示例\.com/[NC]RewriteCond%{HTTP_REFERER}!^\。示例\.com/[NC]RewriteCond%{HTTP_REFERER}!^\。com/[NC]RewriteRule^(.)$[L,R=301]HTTP\u REFERER不应该被依赖:“不是所有的用户代理都会设置此功能,有些代理提供修改HTTP\u REFERER的功能。简言之,它不能真正被信任。”不如改为将指向英文站点的链接设置为指向设置cookies的页面,然后重定向到英文站点。如果它不可信,那也没关系,我只是想让它为大多数用户工作,其中大多数用户都是非技术性的,并使用IE。好吧,试试这个:RewriteCond%{HTTP\u REFERER}^https?://ch\.example\.com[NC]