Как настроить 301 редирект из старых УРЛ на новые?

12
Q
На сайте с 01.04.2006
Offline
143
#11
realmen80:
Obius, вот только дошло дело до испытаний.

Что-то не работает 301 редирект... Попробовал все три предложенные варианта...

У меня в файле .htaccess еще такие строки написаны:


может из-за них не срабатывает 301 редирект?

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

Теперь 301 редиректы прописываете ВНАЧАЛЕ, перед всем тем что нужно движку. таким образом если урл будет требовать 301 редирект сработает правило редиректа, а не правило движка.

obius:
.htaccess

RewriteRule ^(.*)_(.*).htm$ /$2.htm [R=301,L]
или
RewriteRule ^(GOODS|DIR)_(.*).htm$ /$2.htm [R=301,L]
или
RewriteRule ^GOODS_(.*).htm$ /$1.htm [R=301,L]
RewriteRule ^DIR_(.*).htm$ /$1.htm [R=301,L]

ps RewriteRule ^(.*)_(.*).htm$ /$2.htm [R=301,L] - это правило лучше не использовать, т.к. все с _ будет переадресовывать.

Используйте вот это:

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

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

Если вам нужно будет еще добавить правила, добавите по аналогии.

obius
На сайте с 19.08.2015
Offline
56
#12

querty, те правила которые мы советовали, можно засунуть хоть в конец, хоть в начало, хоть еще кое куда :)

У ТСа файл .htaccess


RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.site.ru$
RewriteRule (.*) http://site.ru/$1 [R=301,L]

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

RewriteRule ^dir_(.+).htm$ dir.php?psu=$1 [L,QSA]
RewriteRule ^goods_(.+).htm$ goods.php?psu=$1 [L,QSA]
RewriteRule ^descr_(.+).htm$ descr.php?psu=$1 [L,QSA]

с такими правилами mod_rewrite мы скорее всего заставим фронтэнд или если есть бэкэнд отдать статику, то есть файл *.htm, и в ответ что не удивительно получим 404.

п.с - согласен, правило RewriteRule ^(.*)_(.*).htm$ /$2.htm [R=301,L] кривое :)

п.п.с - ТСу нужны не правила редиректа со старых на новые страницы, а человек, который все правильно настроит.

TF-Studio
На сайте с 17.08.2010
Offline
334
#13

переезжать надо без редиректов. чтобы не было просадок.

на любом движке это можно сделать!

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
Q
На сайте с 01.04.2006
Offline
143
#14
obius:
querty, те правила которые мы советовали, можно засунуть хоть в конец, хоть в начало, хоть еще кое куда :)

Порядок важен.

Откроем страницу DIR_123.htm

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

RewriteRule ^(.*).htm$ dir.php?psu=$1 [L,QSA]

Сделает редирект 301 на 123.htm, потом откроет страницу с помощью скрипта dir.php?psu=123

RewriteRule ^(.*).htm$ dir.php?psu=$1 [L,QSA]

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

сразу откроет страницу DIR_123.htm с помощью скрипта dir.php?psu=DIR_123 (скорее всего будет ошибка)

Это простой пример, на практике может быть скрытый баг при определенных условиях если незадумываясь порядок поменять, а может и не быть если повезет. Даже если правила самого движка позволяют вставить редиректы в конец, лучше все равно ставить в начало, чтобы 1. предовратить возможную ошибку, 2. предотвратить потенциальную ошибку при будущих изменениях, 3. не париться с высчитыванием а можно или нельзя вставить в конце.

12

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