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

Д7
На сайте с 18.11.2014
Offline
80
#191

Добрый день!

Не подскажите, как грамотно сделать 301 редирект со следующих страниц?

Старая: site.ru/stat.php?id=77

Новая: site.ru/tovar/

Объясню в чем дело. Просто раньше на сайте был другой движок и было много закуплено ссылок вот на такие страницы. Вот и хочу их собрать и перенаправить куда надо.

Спасибо!

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


RewriteCond %{THE_REQUEST} " /stat\.php\?id=77 "
RewriteRule ^ /tovar/? [R=301,L]
Д7
На сайте с 18.11.2014
Offline
80
#193

Супер! Все работает!

M
На сайте с 04.12.2013
Offline
223
#194

Если ссылок много, будет лучше подложить в stat.php скрипт, делающий по значению id редирект на нужный адрес.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
D8
На сайте с 16.06.2007
Offline
74
dm8
#195
miketomlin:
Если ссылок много, будет лучше подложить в stat.php скрипт, делающий по значению id редирект на нужный адрес.

Зачем, если структура URL любого сайта должна вписываться в 3-5 строчек регулярных выражений?

dle=>{

category => '^(.+)/$',

category_pager => '([^/]*)/page/(\d+)/',

page => '([^/]+)?/(\d+)-(.+)\.html$',

page1 => '^/(\d+)/(\d+)/(\d+)/([^,]+)\.html$',

comment_page => '/page,\d+,(\d+),(?:(\d+)-)?(.+)\.html$'

},

wordpress=>{

category => '^/(?:category|topics)+(/.+)$',

category_pager => '([^/]*)/page/(\d+)',

page => '([^/]+)?/()([^/\.]+)(?:\.html|/)?$',

page1 => '^/(\d+)/(\d+)/(\d+)/([^/\.]+)',

comment_page => '/([^/]+)(?:.html)?/comment-page-(\d+)',

archive => '/(\d{4})/(\d{2})(?:/(\d{2}))?/?$'

}

тупо скопировано из одного проекта, вордпресс поновее.

A8
На сайте с 15.12.2005
Offline
124
#196

Коллеги, а как корректно сделать редирект только для роботов Яндекса и Гугла?

Здесь http://htaccess.net.ru/doc/mod_rewrite/Bot-User-agent_Mod_rewrite.php (ссылка из полезных материалов в начале топика) дается синтаксис

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} !^yandex.* [NC,OR]

RewriteCond %{HTTP_USER_AGENT} !^googlebot.* [NC,OR]

но в справке Яндекса они (те роботы) называются иначе, например Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)

Какой будет правильно задать условие, что это редирект только для робота Яндекса и Гугла?

Интересует именно что должно идти после {HTTP_USER_AGENT} (с кавычками или без, со звездочками или иначе - короче синтаксис имен бота)?

Спасибо.

UPD

А тут например еще вариант

RewriteCond %{HTTP_USER_AGENT} google

А как все-таки правильно?

K
На сайте с 13.05.2008
Offline
63
#197

Всем привет!

Ищу решение массового 301-редиректа в связи с переносом сайта на другой движок. Нашел вот такую статью http://www.ahp-net.ru/cmschange.ahp сделал всё, как там написано, но где-то в скрипте ошибка…

Автор статьи на связь не выходит… может быть здесь кто-нибудь поможет выявить и исправить ошибку...

вот сам redirect.php

<?php

// Какой URL у нас запросили?

$rq_uri = $_SERVER['REQUEST_URI'];

// Считываем файл как массив строк

$a_src = file('./redirect.csv');

// Разбираем каждую строку как элемент нового массива:

// в нем старый URL становится индексом, а новый – значением

$a_rdr = array();

foreach ($a_src as $val) {

// Разбивка по разделителю

$a_0 = explode('|', $val);

// Добавление в массив с попутной зачисткой пробелов

$a_rdr[trim($a_0[0])] = trim($a_0[1]);

}

// После этого цикла у нас готова таблица редиректов

// Массив строк файла уничтожаем – он больше не нужен

unset($a_src);

// Теперь осталось проверить, есть ли запрошенный URL среди старых

// Если есть, то перенаправляем на соответствующий новый и на этом завершаем работу

if (!empty($a_rdr[$rq_uri])) {

header($_SERVER['SERVER_PROTOCOL']. ' 301 Moved Permanently');

header('Location: http://'.$_SERVER['HTTP_HOST'].$a_rdr[$rq_uri]);

exit();

} else {

// А если запрошенного URL среди старых не нашлось,

// уничтожаем таблицу, чтоб не занимала память и пусть index.php работает дальше

unset($a_rdr);

}

?>

redirect.csv - список старых|новых урлов сделан по следующей схеме:

/2015/01/25/postname/|/categoria/podcategoria/ID-postname.html

В результате, когда ввожу старый урл в браузере, он меняется на новый, но после домена исчезает косая черта - /… т.*е. новый урл отображается так:

mysite.rucategoria/podcategoria/ID-postname.html

а нужно:

mysite.ru/categoria/podcategoria/ID-postname.html

redirect.php и redirect.csv помещены в корень сайта...

В index.php добавлена строка:

include('./redirect.php');

Вот, собственно и всё...

Samail
На сайте с 10.05.2007
Offline
361
#198
krist:
после домена исчезает косая черта - /

Так добавь её


header('Location: http://'.$_SERVER['HTTP_HOST'].'/'.$a_rdr[$rq_uri]);
или так
header('Location: http://mysite.ru/'.$a_rdr[$rq_uri]);
K
На сайте с 13.05.2008
Offline
63
#199

Samail, спасибо за помощь... попробовал оба варианта и в том, и другом случае теперь после домена выходит две косые - //

Samail
На сайте с 10.05.2007
Offline
361
#200

krist, попробовал сделать как по ссылке пишут, у меня черта не исчезает. Видимо где-то в другом месте вырезает её ...может в .htaccess

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