Как сделать редирект (301, 302). Общая тема

MU
На сайте с 01.10.2013
Offline
43
#221

1. условие "RewriteCond %{HTTPS} off" может не работать, если используется реверс-прокси, типа nginx

2. первый аргумент к RewriteRule не должен содержать Query String, поэтому вот это вот работать не будет:

RewriteRule ^/cart/?step=2/$ https://shevrons.ru/cart/?step=2 [L,R=301]

RewriteRule ^/cart/?step=3/$ https://shevrons.ru/cart/?step=3 [L,R=301]

RewriteRule ^/?wpshopcarts=yandex_kassa&step=3&payment=yandex_kassa&paymentType=PC/$ https://shevrons.ru/?wpshopcarts=yan...paymentType=PC [L,R=301]

Видимо придется использовать условия "RewiteCond %{QUERY_STRING}... "

3. Вот тут забыли слэш перед card (или нет, если урл относительный):

RewriteRule ^cart/$ https://shevrons.ru/cart [L,R=301]

Хостинг на SSD от 49 руб./мес. (http://mne.ru/services/virt_hosting.shtml) + бесплатный SSL VPS/VDS на SSD в России от 75 руб./мес. (http://mne.ru/services/vps.shtml) Скидка 10% на хостинг и VPS по промокоду — SEARCHENGINES
E
На сайте с 26.06.2014
Offline
17
#222

Проблема такая:

Страницы старого сайта были вида www.site.ru/blog/post

После переноса стало www.site.ru/blog/post.html

Этих постов там более сотни и у всех прибавилось окончание .html

Окончание не убирается ввиду свойств движка.

Необходимо сделать общий редирект со страниц подкаталога без html на теже страницы, но с html.

Пробовал вариант :

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^/blog/?$

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

Ничего не получается, возможно, что-то не так.

Кто знает, подскажите, плиз.

L
На сайте с 10.02.2015
Offline
256
#223

Я бы делал не редирект 301, а просто реврайтил бы адреса.

П.С.

Движок фигня.

П.П.С.

RewriteCond лишний.

Достаточно так:

RewriteRule ^blog/(.+)$ /blog/$1.html [L]

E
На сайте с 26.06.2014
Offline
17
#224
livetv:
Я бы делал не редирект 301, а просто реврайтил бы адреса.

П.С.
Движок фигня.

П.П.С.
RewriteCond лишний.
Достаточно так:
RewriteRule ^blog/(.+)$ /blog/$1.html [L]

Попробовал Ваш вариант, не получилось, чего-то не хватает, не добавляет окончание html.

L
На сайте с 10.02.2015
Offline
256
#225
Erlick:
Попробовал Ваш вариант, не получилось, чего-то не хватает, не добавляет окончание html.

Оно и не должно добавлять...

Оно должно давать работать старым адресам с новым движком. :)

Если Вы вообще не в теме, попросите кого-то натстроить, а то я мог бы посоветовать выполнить rm -rf из консоли :)

П.С.


RewriteRule ^blog/(.+)$ /blog/$1.html [L]
и Ваш вариант даст циклический редирект, если файла нету.

Правильно так:


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^/blog/.*\.html$
RewriteRule ^blog/(.+)$ /blog/$1.html [L]
E
На сайте с 26.06.2014
Offline
17
#226
livetv:
Оно и не должно добавлять...
Оно должно давать работать старым адресам с новым движком. :)

Надо чтобы добавляло и в url было прописано, вот в чём проблема)

Если нет окончания html двиг определяет это как категорию, если есть окончание, то страница.

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

J
На сайте с 20.02.2014
Offline
120
jkm
#227

Шаблон ^blog/(.+)$ совпадет не только с /blog/post, но и с /blog/post.html, так что в итоге произойдёт зацикливание /blog/post.html.html и тд.

Самый простой способ исправить это заменить (.+) на ([^.]+) тогда шаблон не совпадет с адресами, где есть точка.


RewriteRule ^blog/([^.]+)$ /blog/$1.html [R=301,L]
E
На сайте с 26.06.2014
Offline
17
#228
jkm:
Шаблон ^blog/(.+)$ совпадет не только с /blog/post, но и с /blog/post.html, так что в итоге произойдёт зацикливание /blog/post.html.html и тд.
Самый простой способ исправить это заменить (.+) на ([^.]+) тогда шаблон не совпадет с адресами, где есть точка.

RewriteRule ^blog/([^.]+)$ /blog/$1.html [R=301,L]

Во! Большое спасибо! Данная запись помогла, теперь всё работает.

Действительно, при прежней записи было зацикливание.

livetv:
Оно и не должно добавлять...
Оно должно давать работать старым адресам с новым движком. :)

Если Вы вообще не в теме, попросите кого-то натстроить, а то я мог бы посоветовать выполнить rm -rf из консоли :)

П.С.

RewriteRule ^blog/(.+)$ /blog/$1.html [L]
и Ваш вариант даст циклический редирект, если файла нету.

Правильно так:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^/blog/.*\.html$
RewriteRule ^blog/(.+)$ /blog/$1.html [L]

Последняя запись не сработала :(

J
На сайте с 20.02.2014
Offline
120
jkm
#229
Erlick:
Последняя запись не сработала :(

Тот вариант рабочий нужно только чуть исправить одну строку.


RewriteCond %{REQUEST_FILENAME} !^/blog/.*\.html$

Заменить REQUEST_FILENAME на REQUEST_URI


RewriteCond %{REQUEST_URI} !^/blog/.*\.html$
B
На сайте с 19.04.2014
Offline
29
#230

Добрый день господа, с толкнулся с такой проблемой.

через .htaccess делаю 301 редирект на новый домен

Старый домен ******.space

Новый домен ******.world

Содержание .htaccess


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^*****\.space$ [OR]
RewriteCond %{HTTP_HOST} ^www\.*****\.space$
RewriteRule (.*)$ http://*****.world/$1 [R=301,L]
</IfModule>

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

После того как происходит редирект домен отображается следующем виде *****.wrold а должен быть *****.world

В следствии чего буквы меняются местами?

Как это поправить?

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