.htaccess и RewriteCond - посоветуйте как правильно

V
На сайте с 13.06.2008
Offline
117
4515

Перерыл и перепробовал многое, но что то все не получается :-(

Либо не отрабатывает, либо в 500 ошибку падает

Задача:

есть список сайтов/доменов

надо сделать так, что если с них заходят, то перенаправляются на определенную страницу.

То есть по сути (из того что нашел в инете в примерах)

RewriteCond %{HTTP_REFERER} ^http:/rambler.ru [OR]

RewriteCond %{HTTP_REFERER} ^http:/yandex.ru [OR]

RewriteCond %{HTTP_REFERER} ^http://google.ru [NC]

RewriteRule /perehod_s_poiskov.php

Пробовал различные комбинации (добавляя *$ и [NC])... но результата не получил.

Как правильно создать правило, что имея переход с:

сайт1

сайт2

сайт3

сайт4

переходим на МОЯ_СТРАНИЦА

PS: RewriteEngine on тоже добавлял

siv1987
На сайте с 02.04.2009
Offline
427
#1

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^http://yandex\.ru/ [OR]

RewriteCond %{HTTP_REFERER} ^http://www\.google\.ru

RewriteRule .* /perehod_s_poiskov.php [R,L]

V
На сайте с 13.06.2008
Offline
117
#2
siv1987:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://yandex\.ru/ [OR]
RewriteCond %{HTTP_REFERER} ^http://www\.google\.ru
RewriteRule .* /perehod_s_poiskov.php [R,L]

Проверил переходом с яндекса - спокойно переходит на главную и правила не отрабатывают

:(

то есть сейчас правило выглядит так:


RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://http://w*****f\.org/ [OR]
RewriteCond %{HTTP_REFERER} ^http://http://s*****t\.net/ [OR]
RewriteCond %{HTTP_REFERER} ^http://http://c*****o\.ru/ [OR]
RewriteCond %{HTTP_REFERER} ^http://http://a*****y\.ru/ [OR]
RewriteCond %{HTTP_REFERER} ^http://http://yandex\.ru
RewriteRule .* /ref_CAP.php [R,L]

Когда случайно последние две строчки были вида:


RewriteCond %{HTTP_REFERER} ^http://http://yandex\.ru [OR]
RewriteRule .* /ref_CAP.php [R,L]

меня вместо любой страницы пыталось перенаправить на ref_CAP.php и выдавало 302 ошибку

siv1987
На сайте с 02.04.2009
Offline
427
#3
Когда случайно последние две строчки были вида:

В последним RewriteCond перед rewritRule не должно быть флага OR

меня вместо любой страницы пыталось перенаправить на ref_CAP.php и выдавало 302 ошибку

По понятнее пожалуйста, что такое "вместо любой страницы"? Все верно, 302 редирект сработает, про 302 ошибку не знаю.

то есть сейчас правило выглядит так:

Лол?

V
На сайте с 13.06.2008
Offline
117
#4
siv1987:
В последним RewriteCond перед rewritRule не должно быть флага OR

Я знаю, судя из Вашего примера его не должно быть.

Порст про это написал, что бы показать, что данный mod на хостинге прописан (а то некоторые отрублены)


По понятнее пожалуйста, что такое "вместо любой страницы"? Все верно, 302 редирект сработает, про 302 ошибку не знаю.

ввожу в браузере адрес мой_сайт/любая_страница (даже той, которой нет)

происходит переадресация на ref_CAP.php

Но вместо того, что должно быть на странице, браузер отображает в заголовке "302 Found"

а текст:

Found

The document has moved here.


Лол?

Нет :-)

Это у меня способ проверить, что при переходе с данного домена меня перекинет на нужную страницу.

Он чисто для тестов сейчас так сделан, и то комментируется после эксперемента сразу же

siv1987
На сайте с 02.04.2009
Offline
427
#5
Порст про это написал, что бы показать, что данный mod на хостинге прописан (а то некоторые отрублены)

Просто писать не надо, пример рабочего варианта я вам дал в первом примере. Если вы составляете по нему свои правила и они на работают, то сюда приводите точь в точь как у вас написано в файле (домены можете замазать) - здесь телепатов нету, угадать что "это" написано просто, а вот "это" чисто для тестов.

ввожу в браузере адрес мой_сайт/любая_страница (даже той, которой нет)

Для мод_реврайта нет такого понятия "существующая страница". Редиректится любой УРЛ с реферером указанном в условие.


Нет :-)
Это у меня способ проверить

Вы обратите внимания что у вас адрес неправильно написан.

Зы

Да, реферер при серверном редиректе сохраняется, поэтому, если страница находится на том же домене, то для нее нужно сделать исключение, иначе получится зацикливание как в вашем случае 302 Found

RewriteCond %{REQUEST_URI} !^/perehod_s_poiskov.php

RewriteCond %{HTTP_REFERER} ^http://yandex\.ru/ [OR]

RewriteCond %{HTTP_REFERER} ^http://www\.google\.ru

RewriteRule .* /perehod_s_poiskov.php [R,L]

V
На сайте с 13.06.2008
Offline
117
#6
siv1987:

Вы обратите внимания что у вас адрес неправильно написан.

Вот я ЛОШАРА!!! :-D

глаз явно замылился за весь день...


Зы
Да, реферер при серверном редиректе сохраняется, поэтому, если страница находится на том же домене, то для нее нужно сделать исключение, иначе получится зацикливание как в вашем случае 302 Found

RewriteCond %{REQUEST_URI} !^/perehod_s_poiskov.php
RewriteCond %{HTTP_REFERER} ^http://yandex\.ru/ [OR]
RewriteCond %{HTTP_REFERER} ^http://www\.google\.ru
RewriteRule .* /perehod_s_poiskov.php [R,L]

СПАСИБО!

ВСЕ РАБОТАЕТ!

PS: Вы не сильно будете ругаться, если такой нуб как я, Великого Гуру еще поспрашает немного?

Есть ссылка вида: http://w*****.ru/?ref_r=114961816194

Можно сделать средствами .htaccess, что именно по этой динамической ссылке, будет переход на страницу /stop.php ???

а другие динамические реф.ссылки работали нормально?

средствами php это то знаем как реализовать.

siv1987
На сайте с 02.04.2009
Offline
427
#7
что именно по этой динамической ссылке, будет переход на страницу /stop.php ???

Если конкретно по этой, то

RewriteCond %{QUERY_STRING} ^ref_r=114961816194$

RewriteRule .* /stop.php? [R,L]

добавлять надо Перед предыдущем блоком (но после r-engine on), в противном случае может захватится им.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий