gormarket

gormarket
Рейтинг
47
Регистрация
29.12.2010

чтоб обрабатывалось и

http://site.ru/ru

сделайте так


RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]

RewriteRule ^(.*)ru/(.*)$ $1/$2 [R=301,L,E=RWR:yes]
RewriteRule ^ru$ http://%{HTTP_HOST}/ [R=301,L,E=RWR:yes]

Если у Вас нет реального каталога /catalog/furniture/bedrooms

то этот адрес обрабатывается самым первым правилом RewriteRule, и до редиректа на адрес со слешем не доходит

и в этом случае может помочь код


RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)/[^./]$ $0/ [R=301,L,E=RWR:yes]

вставленный сразу после

RewriteEngine On

(если Вы еще не пробовали применить мое самое первое предложение, до того как выложили содержимое htaccess )

Ну тогда последнее, что могу предположить и посоветовать:

в htaccess возможно есть правила которые преобразуют адрес, не позволяя сделать редирект

попробуйте добавить в htaccess в корне сайта перед первыми имеющимися командами RewriteRule или Redirect следующий код

(сразу после

RewriteEngine On

RewriteBase /)


RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]

RewriteRule ^(.*)ru/(.*)$ $1/$2 [R=301,L,E=RWR:yes]

третья строчка делает 301 редирект на адрес без "/ru/" и устанавливает переменную "RWR"

а первые две строки делают выход из преобразований, если переменная "RWR" есть.

Не нашел в Вашем htaccess правил, которые делают переадресацию

со страниц /catalog/furniture/bedrooms на страницы /catalog/furniture/bedrooms/

Добавьте после строк

RewriteCond %{REQUEST_URI} ^(.*)/index.php$

RewriteRule ^(.*)$ %1/ [R=301,L]


RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)/[^./]$ $0/ [R=301,L]

а http://site.ru/ у Вас нормально отображается? (не перебрасывает на http://site.ru/ru/ ?)

если нормально, то можно попробовать добавить флаг PT


RewriteRule ^(.*)ru/(.*)$ $1/$2 [R=301,L,PT]

Он нужен, если используются кроме mod_rewrite еще и другие трансляторы "URI-имя файла" (иначе они не видят результатов работы RewriteRule и обрабатывают исходный URI)

не знаю что такое Жумфиш, но вдруг поможет

а так попробуйте:


RewriteRule ^(.*)ru/(.*)$ $1/$2 [R=301,L]

для адреса типа

http://site.ru/ru/index.php

первый вариант действительно не работает

он работает для адресов, если в них перед "/ru/" есть папка

http://site.ru/folder/ru/index.php

не имел дела с битриксом, но наверно у Вас уже в htaccess прописано много правил преобразований, а они могут вносить свое влияние

Поэтому чтоб разобраться с тем кодом что Вы привели, нужно видеть весь файл htaccess.

Но есть и другой вариант:

попробуйте добавить в htaccess в корне сайта перед первыми имеющимися командами RewriteRule или Redirect


RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)/[^./]$ $0/ [R=301,L,E=RWR:yes]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)/?index\.php$ http://%{HTTP_HOST}/$1/ [R=301,L,E=RWR:yes]

Первая пара строк прекращает дальнейшие преобразования если они были сделаны во 2 или 3 парах строк

Вторая пара строк делает 301 редирект на адрес с добавления слеша (если его нет и преобразований еще не было)

Третья пара строк делает 301 редирект на каталог, если запрашивается index.php

здесь я не совсем уверен в работоспособности приведенной строки для index.php в подкаталогах

если бы нужно было только в корне сайта, то так

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteRule ^index.php$ http://%{HTTP_HOST}/ [R=301,L,E=RWR:yes]

Надеюсь у Вас сейчас нормально отобажаются адреса, заканчивающиеся на слеш (иначе нужны еще дополнительные команды)

добавьте в htaccess в корне сайта


RewriteEngine On
RewriteBase /

RewriteRule ^(.*)/ru/(.*)$ $1/$2 [R=301,L]

(если первые 2 строчки уже есть в htaccess, еще раз добавлять не нужно)

Чтобы убрать 301 редиректом любую строку запроса в адресе после index.php добавьте в htaccess в корне сайта


RewriteCond %{QUERY_STRING} !^$
RewriteRule ^index.php$ index.php? [R=301,L]

И не забудьте проверить, включен ли у Вас модуль mod_rewrite (если в htaccess нет следующих строк, добавьте их)


RewriteEngine On
RewriteBase /

PROGRAMMATOR, Ваш вариант выдергивает ссылки не только из тега "а", но и из тега "link", например

<link rel="icon" href="favicon.ico" type="image/x-icon" />

SeoSkunk, если базовым является site.ru, и работаем на PHP, то все ссылки с site.ru можно выбрать так:


if(preg_match_all('#<a[^>]*href=["\' ]*([^>]*site.ru[^>\'"]*)["\' ]*[^>]*>#i',$content,$match)){
print '<pre>';
print_r ($match[1]);
print '</pre>';
}

а если хотите выбрать все ссылки, а не только на site.ru, то так:


if(preg_match_all('#<a[^>]*href=["\' ]*(https?://[^>\s\'"]{4,80})[^>\'"]*["\' ]*[^>]*>#i',$content,$match)){
print '<pre>';
print_r ($match[1]);
print '</pre>';
}

gormarket добавил 30.03.2011 в 09:56

Я вчера был не совсем прав:

пытался "быстренько допилить" заготовку, ранее написанную для других целей, и не учел, что могут быть еще и относительные ссылки

Так что мой последний вариант такой:


if(preg_match_all('#<a[^>]*href=["\'\s]*([^>"\'\s]+)["\'\s]*[^>]*>#i',$content,$match)){
print '<pre>';
print_r ($match[1]);
print '</pre>';
}
Всего: 437