htaccess перенаправлять только в том случае, если реферер HTTP НЕ равен чему-либо

У меня есть следующие правила для перенаправления китайских пользователей на версию сайта на китайском языке:

  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]

Но это не работает.


person jazzdrive3    schedule 29.08.2012    source источник


Ответы (1)


Как насчет того, когда пользователь просматривает свою вторую страницу на английском сайте, он будет перенаправлен на китайский. Лучший способ — установить файл cookie, а затем проверить его:

Например: http://www.askapache.com/htaccess/htaccess-fresh.html#Set_Cookie_based_Requested_directory

person Paul    schedule 29.08.2012
comment
Хорошая точка зрения. Но мы должны иметь возможность проверить вообще, является ли реферал с 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} !^пример\.com/ [NC] RewriteRule ^(.)$ ch.example. ком/$1 [L,R=301] - person jazzdrive3; 30.08.2012
comment
На HTTP_REFERER не следует полагаться: не все пользовательские агенты будут устанавливать это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию. Короче говоря, этому нельзя доверять. - person Paul; 30.08.2012
comment
Как насчет того, чтобы вместо этого установить ссылку на английский сайт, чтобы она указывала на страницу, которая устанавливает файлы cookie, а затем перенаправляет на английский сайт. - person Paul; 30.08.2012
comment
Это нормально, если этому нельзя доверять, я просто пытаюсь заставить его работать для большинства пользователей, большинство из которых в любом случае не являются техническими, и используют IE. - person jazzdrive3; 30.08.2012
comment
Хорошо, попробуйте следующее: RewriteCond %{HTTP_REFERER} !^https?://ch\.example\.com [NC] - person Paul; 30.08.2012