Location при 301 редиректе

Unlock
На сайте с 01.08.2004
Offline
782
786

Подскажите пожалуйста, как правильно при 301 редиректе должен быть написан Location:

1) Location: '.strtolower($_SERVER['REQUEST_URI'])

2) Location: http://www.site.com'.strtolower($_SERVER['REQUEST_URI'])

В броузере то оба варианта работают, но какой правильный, чтобы с ботами не было проблем?

Есть желание, - тысяча способов; нет желания, - тысяча поводов! /Петр-I/.
JasonBourne
На сайте с 25.09.2007
Offline
3
#1
Unlock:
Подскажите пожалуйста, как правильно при 301 редиректе должен быть написан Location:
1) Location: '.strtolower($_SERVER['REQUEST_URI'])
2) Location: http://www.site.com'.strtolower($_SERVER['REQUEST_URI'])
В броузере то оба варианта работают, но какой правильный, чтобы с ботами не было проблем?

Правильней наверно будет с HTTP, более того, в документации на PHP.net написано, что в протоколе http версии 1.1, указание абсолютного пути, включая имя хоста и полный путь, обязательно (!) (но некоторые клиенты - броузеры, поддерживают и относительные пути, без имени хоста).

Замечание: HTTP/1.1 requires an absolute URI as argument to Location: including the scheme, hostname and absolute path, but some clients accept relative URIs. You can usually use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() to make an absolute URI from a relative one yourself:

Там же приведен немного громоздкий пример правильного использования редиректа location:


/* Redirect to a different page in the current directory that was requested */
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;

P.s. Вот тут еще немного сам для себя про редиректы выписывал.

[ remoter.ru - удаленная работа (http://remoter.ru) ] [ файлообменник, без рекламы (http://share.remoter.ru) ]
Unlock
На сайте с 01.08.2004
Offline
782
#2

Т.е. получается Location: http://www.site.com'.strtolower($_SERVER['REQUEST_URI']) правильный вариант? Ведь Location: http://$host$uri/$extra из примера по сути тоже самое, или нет?

JasonBourne
На сайте с 25.09.2007
Offline
3
#3
Unlock:
Т.е. получается Location: http://www.site.com'.strtolower($_SERVER['REQUEST_URI']) правильный вариант? Ведь Location: http://$host$uri/$extra из примера по сути тоже самое, или нет?

Ага 🙄

Shtogrin
На сайте с 02.11.2006
Offline
95
#4

Если в адресе не будет аргументов, адрес будет в нижнем регистре и это будет на одном сервере, то такой редирект будет делать перенаправление сам на себя. Что надо сделать?

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
Петр Елагин
На сайте с 21.03.2007
Offline
197
#5
Unlock:
Подскажите пожалуйста, как правильно при 301 редиректе должен быть написан Location:
1) Location: '.strtolower($_SERVER['REQUEST_URI'])
2) Location: http://www.site.com'.strtolower($_SERVER['REQUEST_URI'])
В броузере то оба варианта работают, но какой правильный, чтобы с ботами не было проблем?

1. вопрос для чего.

Если вы делаете под яшу сразу говорю - Яша банит это ! не важно как сделано он просто банит и все.

Мне Платон ответил точно и прямо "Убери Редирект"

Гугл нет . все с ним нормально .

Unlock
На сайте с 01.08.2004
Offline
782
#6

Shtogrin, Роман, ситуация такая. Раньше были адреса страниц вида: script.php?mode=name&text=Keyword1+Keyword2&page=0 а теперь script.php?mode=name&text=keyword1+keyword2&page=0

вот надо со старых адресов сделать 301 редирект. Сделать то я его сделал, но как правильно Location задать, не знаю.

AlienZzzz, с яшей не работаю, но вообще удивили, неужели Я банит за 301 редирект, глупость какая-то с его стороны, если это так.

Shtogrin
На сайте с 02.11.2006
Offline
95
#7

if(strtolower($_SERVER['REQUEST_URI'])!=$_SERVER['REQUEST_URI'])

{
header('HTTP/1.1 301 Moved Permanently');
header("Location: http://{$_SERVER['HTTP_HOST']}".strtolower($_SERVER['REQUEST_URI']));
exit (0);
}

Проверка необходима для избежания зацикливания. Надо вставить в начало скрипта.

Можно и через mod_rewrite, но так тоже будет правильно

Unlock
На сайте с 01.08.2004
Offline
782
#8

Роман, а это нормально что сервисы по проверке HTTP заголовков показывают такой адрес:

Location: http://www.site.com:80/script.php.........

Ну т.е. редирект ведет куда надо, и в броузере порт не отображает, а вот сервисы показывают именно в виде site.com:80

Shtogrin
На сайте с 02.11.2006
Offline
95
#9

Владимир, это видимо сервисы добавляют. В принципе это одно и тоже, 80 - стандартный порт для http.

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