Как в htaccess исключить некоторые урлы из 301го редира

M5
На сайте с 11.07.2007
Offline
122
6810

здравствуйте.

поставил в htaccess 301 редирект с сайта 1 на сайт 2

RewriteCond %{HTTP_HOST} ^сайт1$

RewriteRule ^(.*)$ http://сайт2/$1 [R=301,L]

чтобы исключить из правила например файл robots, надо между этих строк вставить

RewriteCond %{REQUEST_FILENAME} !robots.txt$

все работает. Но подскажите, как исключить из обработки какой либо урл, или группу урлов. Вместо robots ставлю урл

RewriteCond %{REQUEST_FILENAME} !public/item32$ или RewriteCond %{REQUEST_FILENAME} !^.*public/item32$

но исключение не отрабатывает.

Подскажите плз что не так ?

Комплексный подход к продвижению сайтов (грамотный подбор фраз, оптимизация, реклама в директе). Мин бюджет 25к в месяц.
siv1987
На сайте с 02.04.2009
Offline
427
#1

REQUEST_FILENAME это не url, а сравнение с файлом не сервере, как не трудно догадаться из названия. Для сравнения url используется REQUEST_URI

M5
На сайте с 11.07.2007
Offline
122
#2

менял FILENAME на URI - безрезультатно

правило работает одинаково верно в обоих случаях

RewriteCond %{REQUEST_FILENAME} !robots.txt$

и

RewriteCond %{REQUEST_URI} !robots.txt$

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

Значит не правильно указали адрес. Покажите урл.

M5
На сайте с 11.07.2007
Offline
122
#4

хотел еще изменить вхождение в самом rewriterule, но тоже не получается.

По логике все урлы которые содержат item32 не должным этим правилом обрабатываться - но все равно редиректит все подряд

RewriteRule ^(.*[^item32].*)$ http://сайт2/$1 [R=301,L]

--------------------

вот содержимое htaccess

RewriteCond %{HTTP_HOST} ^сайт1\.ru$

RewriteCond %{REQUEST_URI} !robots.txt$

RewriteRule ^(.*)$ http://сайт2.ru/$1 [R=301,L]

# Дополнительные статьи

RewriteRule ^(public)/item([0-9]+)$ /publ1.php?type=$1&id=$2 [L]

--------------------

siv1987
На сайте с 02.04.2009
Offline
427
#5
правило работает одинаково верно в обоих случаях

В случае с роботс это файл. В вашем примере я файла не вижу, чпу нужно проверять через request_uri.

И не будет работать. Вам уже подсказали как нужно.

---------- Добавлено 15.03.2015 в 14:32 ----------

RewriteCond %{REQUEST_URI} !/public/item1$

M5
На сайте с 11.07.2007
Offline
122
#6
siv1987:
RewriteCond %{REQUEST_URI} !/public/item1$

по этому исключению уходим на сайт2 по этой ссылке

сайт2/publ1.php?type=public&id=66

т.е. получается зацикливается апач, исключение срабатывает, но затем в след. конструкции (RewriteRule ^(public)/item([0-9]+)$ /publ1.php?type=$1&id=$2 [L]) идет преобразование на урл вида publ1.php?type=public&id=66, и при повторном запуске htaccess уже урл не удовлетворяет правилу (RewriteCond %{REQUEST_URI} !/public/item1$) и благополучно переходит на сайт 2. Как то так, если я не ошибся

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

Потому что это ссылка к этому исключению не имеет никакого отношения. Там явно указан какой адрес исключить. Для других адресов нужно писать другие правила.

M5
На сайте с 11.07.2007
Offline
122
#8
siv1987:
Потому что это ссылка к этому исключению не имеет никакого отношения. Там явно указан какой адрес исключить. Для других адресов нужно писать другие правила.

тогда так?

RewriteCond %{REQUEST_URI} !/public/item1$ [OR]

RewriteCond %{REQUEST_URI} !/publ1.php?type=public&item=1$

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

Параметры запроса сравниваются по QUERY_STRING, притом переменная содержит исключительно строку запроса.

%{REQUEST_URI}?%{QUERY_STRING} !/publ1\.php\?type=public&item=1$

M5
На сайте с 11.07.2007
Offline
122
#10

спасибо, заработало в таком виде

RewriteCond %{REQUEST_URI} !/public/item1$

RewriteCond %{QUERY_STRING} !type=public&item=1$

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