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

[Удален]
388

Обычно, что бы организовать перенаправление на новую страницу юзал в .htaccess следующую конструкцию:

Redirect 301 /razdel.php http://www.site.ru/razdel

Все работает.

Появилась такая задача:

Redirect 301 /razdel http://www.site.ru/razdel/

от этой конструкции апач сходит с ума и пишет "Веб-страница http://www.site.ru/razdel////////////////////// привела к избыточному количеству переадресаций."

Как правильно все сделать в этой ситуации?

asfadel
На сайте с 29.12.2009
Offline
40
#1

вы просто хотите перевести все урлы вида domain.ltd/* в вид domain.ltd/*/ ?

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !/$

RewriteRule (.*) http://domain.ltd/$1/ [R=301,L]

Может так? Т.е. я убеждаюсь, что /* - не файл, что url не является разделом,

как в вашем примере и только в этом случае добавляю ему в хвост /$1/

[Удален]
#2

Не все, а один конкретный.

alexspb
На сайте с 14.11.2005
Offline
187
#3

Надо обозначить, что урл является точным вхождением, для чего служат знаки ^ в начале и $ в конце, ну и флаг L, чтобы не выполнялись дальнейшие преобразование (лучше это правило при наличии других ставить в начале)

RewriteEngine On

RewriteRule ^/razdel$ razdel/ [R=301,L]
asfadel
На сайте с 29.12.2009
Offline
40
#4

правду сказал alexspb. не забудьте убрать тот редирект, что создает loop. а по хорошему, покажите htaccess, может у вас там прописано правило удалять последний слеш.

[Удален]
#5

Перепробовал все варианты. Что-то у меня не получается.

Релевантный кусок htaccess выглядит так:

RewriteEngine On

RewriteRule ^catalogue/([0-9]+)/$ /catalogue.php?pos_id=$1

RewriteRule ^catalogue/([0-9]+)$ /catalogue.php?pos_id=$1

(достался мне по наследству, весь его идиотизм я понимаю, но так уж вышло :()

Мне нужен 301 редирект с catalogue/33 на catalogue/33/

RewriteRule ^catalogue/33/$ catalogue/33 [R=301,L] (со всеми вариациями) не срабатывает почему-то. Тоже зацикливается

shamuey добавил 29.01.2010 в 11:55

Если кому интересно, победить задачу "добавить в конце слеш" средствами mod_rewrite не удалось. Решили средствами php.

if (substr($_SERVER['REQUEST_URI'], -1) != '/'){

header('HTTP/1.1 301 Moved Permanently');

header("Location: ".substr(BASE_HREF, 0, (strlen(BASE_HREF)-1)).$_SERVER['REQUEST_URI'].'/');

die();

}

[Удален]
#6

Опять геморрой. Проклятое гуманитарное образование; проклятый слеш...

RewriteRule ^catalogue/([0-9]+)/$ /catalogue.php?pos_id=$1

RewriteRule ^catalogue/([0-9]+)$ /catalogue.php?pos_id=$1

<-- такая вот странная конструкция, которая формирует одновременно и http://www.site.ru/catalogue/250, и http://www.site.ru/catalogue/250/ -->

Redirect 301 /catalogue/250/ http://www.site.ru/catalogue/250

В итоге получается http://www.site.ru/catalogue/250?pos_id=250, а хочется естественно http://www.site.ru/catalogue/250

Снизойдите, о повелители mod_rewrite. 10 wmz тому, чье решение будет работать.

A
На сайте с 24.02.2008
Offline
96
#7
shamuey:
Опять геморрой. Проклятое гуманитарное образование...

RewriteRule ^catalogue/([0-9]+)/$ /catalogue.php?pos_id=$1
RewriteRule ^catalogue/([0-9]+)$ /catalogue.php?pos_id=$1

Redirect 301 /catalogue/250/ http://www.site.ru/catalogue/250

В итоге получается http://www.site.ru/catalogue/250?pos_id=250

Снизойдите, о повелители mod_rewrite. 10 wmz тому, чье решение будет работать.

В помощь Вам:

Редирект с помощью директивы Redirect или RedirectPermanent модуля mod_alias

Redirect 301 /old-page.html http://new-domain.ru/new-page.html

или

Redirect permanent /old-page.html http://new-domain.ru/new-page.html

Недостатком данного способа является то, что все адреса, которые необходимо перенаправить, нужно перечислять один за одним, каждый отдельно. Также можно использовать RedirectPermanent для аналогичных целей.

RedirectPermanent /old-url.html http://new-site.ru/new-url.html

Редирект с помощью директивы RedirectMatch

Этот редирект подобен предыдущему, за исключением того, что можно задавать регулярное выражение для старых URL адресов. Допустим, при смене движка с PHP на ASP, можно старые адреса перенаправить следующим образом:

RedirectMatch /(.*)\.php$ /$1.aspx
Виртуальная АТС для бизнеса - омниканальная платформа (https://neirika.ru).

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