Помогите с 301 редиректом

[Удален]
553

http://www.сайт.ru/раздел/555-слово1-слово2-слово3-110

на

http://www.сайт.ru/раздел/555-слово3-110

т.е. нужно вырезать конфигурацию -слово1-слово2 не только для этого варианта, а для всех подобных

прописываю так RewriteRule /раздел/([0-9]+)-слово1-слово2-(.*) $1-$2 [R=301]

не работает :(

gormarket
На сайте с 29.12.2010
Offline
47
#1

Это Вы пытаетесь сделать редирект на http://www.сайт.ru/555-слово3-110, да и первый слеш не нужен

пробуйте так


RewriteRule ^(раздел/[0-9]+)-слово1-слово2-(.*)$ $1-$2 [R=301,L]

или так


RewriteRule ^(раздел/[0-9]+)-[^-]+-[^-]+-(.*)$ $1-$2 [R=301,L]

(если RewriteBase не задан, то перед $1 можно поставить слеш "/$1...")

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
[Удален]
#2

К сожалению Ваши варианты не сработали, слеш на конце пробовал ставить тоже без результата...

Sinaps добавил 18.05.2011 в 14:27

Вот такой вариант выдает почти то что нужно

RewriteRule ^.*\/([0-9]+)-слово1-слово2-(.*)-([0-9]+)$ $1-$2-$3 [R=301,L]

Но ссылка становится

http://www.сайт.ru/var/www/имя пользователя/data/www/сайт.ru/510-слово3-87

Тпереь думаю как убрать /var/www/имя пользователя/data/www/сайт.ru

gormarket
На сайте с 29.12.2010
Offline
47
#3

код редиректа рабочий, проверил на локальном сервере

сделал папку razdel, в ней папку 555-slovo3-110 и положил туда файл index.php

в корневом .htaccess сайта добавил строку

RewriteRule ^(razdel/[0-9]+)-slovo1-slovo2-(.*)$ $1-$2 [R=301,L]

и обратился по адресу

http://www.test.ru/razdel/555-slovo1-slovo2-slovo3-110

в результате был перенаправлен на

http://www.test.ru/razdel/555-slovo3-110/

Почему не работает у Вас - могут быть десятки причин

например адрес задан кирилицей (в этом случае вообще не знаю как делать редирект, не сталкивался)

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

или вы добавляете правило редиректа слишком рано (в начало файла, до строки RewriteEngine On), или слишком поздно (после правила, которое уже преобразовало URL)

Если у Вас сайт корректно отображает уже преобразованный URL (вида http://www.сайт.ru/раздел/555-слово3-110 ), то можно сделать еще такую попытку: поставить код сразу после строк

RewriteEngine On

RewriteBase /

и в нем сделать назначение переменной (например RWR) при редиректе и проверку этой переменной в первых строках, чтобы выйти из .htaccess без дальнейших преобразований при повторном проходе, если преобразование уже сделано:


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

RewriteRule ^(раздел/[0-9]+)-слово1-слово2-(.*)$ $1-$2 [R=301,L,E=RWR:yes]

(не забудьте заменить русские слова в правиле их реальным значением латиницей)

===========

Добавлено позже

===========

У Вас на задано значение RewriteBase, поэтому в начало адреса добавляется физический путь на сервере

Либо добавьте строку

RewriteBase /

либо, если это неприемлимо, указывате полный путь при редиректе

RewriteRule ^.*/([0-9]+)-slovo1-slovo2-(.*)-([0-9]+)$ http://%{HTTP_HOST}/$1-$2-$3 [R=301,L]

Вот только в этом варианте у Вас теряется "razdel/", и будет

http://www.test.ru/555-slovo3-110/

[Удален]
#4
gormarket:

RewriteEngine On
RewriteBase /
и в нем сделать назначение переменной (например RWR) при редиректе и проверку этой переменной в первых строках, чтобы выйти из .htaccess без дальнейших преобразований при повторном проходе, если преобразование уже сделано:


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

RewriteRule ^(раздел/[0-9]+)-слово1-слово2-(.*)$ $1-$2 [R=301,L,E=RWR:yes]


Большое спасибо, вот это сработало!!!

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