Используя .htaccess, я хочу перенаправить на основе http_referer все поддомены, КРОМЕ двух конкретных поддоменов - PullRequest
0 голосов
/ 05 января 2012

Используя .htaccess, я изо всех сил пытаюсь составить правильное регулярное выражение для перенаправления на основе http_referer всех поддоменов, КРОМЕ двух.

Допустим, у меня было

one.refered.com
two.refered.com

, который я не хотел перенаправлять, но example.refered.com или [any other subdomain but one or two].refered.com.

Чтобы получить их, я мог бы использовать

RewriteCond %{http_referer} ^http://([^.]+.)*(refered).com
RewriteRule ^$ yoursite.html [R=302,L]

но я борюсь с частью исключения.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Попробуйте это правило:

RewriteCond %{HTTP_REFERER} ^http://(.+\.)*refered\.com
RewriteCond %1 !^(one|two)\.$
RewriteRule ^$ yoursite.html [R=302,L]
  • В первом условии мы фиксируем имя субдомена
  • Во втором состоянии мы проверяем, не совпадает ли захваченное имя субдомена one. или two.

Если оба условия соблюдены («отношение» между условиями по умолчанию логическое И ), то мы приступаем к переписыванию / перенаправлению.

Данные испытаний:

http://meow.refered.com/hello.php     = redirect
http://one.refered.com/hello.php      = ignore
http://one.two.refered.com/hello.php  = redirect
0 голосов
/ 05 января 2012

Это очень сложно, и я бы не советовал делать это, если вам не нужно подавать его другому инструменту (который, очевидно, вы делаете).

http://(?!one|two)(\w+\.)+(?<!one|two)referred\.com

Это говорит:

Найти"http://" до тех пор, пока в at не следуют" один "или" два "

, найдите любое количество поддоменов (\ w.) +

и найдите" Refer.com "какпока ему не предшествует "один" или два "

http://one.referred.com                  * no match
http://two.referred.com                  * no match
http://blah.referred.com                 * matches
http://blah.one.blah.referred.com        * matches
http://two.blah.referred.com             * no match
...