И снова 301 редирект

savage
На сайте с 10.01.2007
Offline
224
1044

Нужно поменять урлы вида http://www.site.ru/services.php?num=120 на ЧПУ вида: http://www.site.ru/naimenovanie-uslugi/

Через mod_rewrite это делается так:

RewriteRule ^naimenovanie-uslugi/$ services.php?num=120 - и все - уже можно открывать страницу http://www.site.ru/naimenovanie-uslugi/ и видеть старую страницу уже по новому адресу.

Но на старую страницу закупались ссылки и нужно сделать 301 редирект со старой страници на новую. Как ни пробовал, например:

Redirect 301 /services.php?num=120 http://www.site.ru/naimenovanie-uslugi/

RewriteRule ^services.php?num=120$ /naimenovanie-uslugi/ [R=301,L]

- не редиректит, старая страница http://www.site.ru/services.php?num=120 по-прежнему открывается.

Здесь:

http://www.kass.ws/2007/09/13/301-redirect-rukovodstvo-po-pravilnoy-seo-ekspluatatsii/

и в аналогичных статьях ответа не нашел. Подскажите, плиз, как это делается.

savage добавил 18.10.2011 в 22:26

Получилось отредиректить так:

RewriteRule ^services.php?num=120$ http://www.site.ru/naimenovanie-uslugi/? [L,R=301]

RewriteRule ^naimenovanie-uslugi/$ /services.php?num=120

Редиректить-то он в браузере редиректит, а ответ сервера 200, видимо из-за того, что страница существует и получается переадресация на саму себя. Как получить 301 ответ?

savage добавил 19.10.2011 в 00:22

Удалось получить 301 ответ сервера, но тогда браузер не перенаправляется на новый урл, а выдается невозможно отобразить страницу.

Купить / продать сайт ( https://www.telderi.ru/?pid=ca1f70 ) | Недорогой и надежный хостинг ( https://www.get-host.ru )
O
На сайте с 06.03.2006
Offline
42
#1

удалено: ошибка

V
На сайте с 12.02.2009
Offline
91
#2

Была такая же проблема, надо было с http://site.ru/page.php?id=120 на http://site.ru/id120

Кучу мануалов прочитал, ничего не помогло) Только таким образом смог:

Добавил в исходном .php файле (page.php):

if ($id==120) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.ru/id120");
exit();
}

У вас соответственно в services.php проверять "$num"

Надеюсь, что помог) Если разберетесь как через .htaccess - отписывайте тут)

savage
На сайте с 10.01.2007
Offline
224
#3

Vigar, cпасибо, такой вариант тоже пробовал, но из-за того, что код не в начало файла вначале разместил, он не работал корректрно. И еще в вашей интерпретации 301 ответ сервер отдает, но на страницу в браузере не редиректит, похоже из-за того, что в .htaccess прописано:

RewriteRule ^naimenovanie-uslugi/$ /services.php?num=120

и, соотвественно, как только срабатывает services.php?num=120 - опять редирект в коде php, получается закольцованность.

Заработало так:

if (($_GET['num']==120)&&($REQUEST_URI!='/naimenovanie-uslugi/'))

в этом случае уже когда урл правильный редирект не срабатывает. Через htaccess похоже в любом случае получается закольцованность - как сделать так и не нашел пока.

По .htaccess нашел хороший компактный мануал, может кому пригодится, лучше не видел:

http://www.beget.ru/art9.html

Судя по нему - должно работать так:

RewriteCond %{REQUEST_URI} ^/services.php?num=120*

RewriteRule ^(.*)$ http://www.site.ru/naimenovanie-uslugi/? [R=301]

RewriteRule ^naimenovanie-uslugi/$ services.php?num=120 [L]

Но код ответа сервера почему-то 200, а не 301. В итоге пока работает как нужно только php-ный редирект.

V
На сайте с 12.02.2009
Offline
91
#4
savage:
Vigar, cпасибо, такой вариант тоже пробовал, но из-за того, что код не в начало файла вначале разместил, он не работал корректрно. И еще в вашей интерпретации 301 ответ сервер отдает, но на страницу в браузере не редиректит, похоже из-за того, что в .htaccess прописано:
RewriteRule ^naimenovanie-uslugi/$ /services.php?num=120

Возможно, у меня просто .htaccess чист от 301 редиректов, только на www. редирект, поэтому в браузере все ок)

savage:

По .htaccess нашел хороший компактный мануал, может кому пригодится, лучше не видел:
http://www.beget.ru/art9.html

Судя по нему - должно работать так:
RewriteCond %{REQUEST_URI} ^/services.php?num=120*
RewriteRule ^(.*)$ http://www.site.ru/naimenovanie-uslugi/? [R=301]
RewriteRule ^naimenovanie-uslugi/$ services.php?num=120 [L]
Но код ответа сервера почему-то 200, а не 301. В итоге пока работает как нужно только php-ный редирект.

Должно, но у меня тоже не работает)) Спасибо за ссылку, будет время - попробую еще раз разобраться, но пока через php работает - и то хорошо)

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