#php #header #location #uri
#php #заголовок #Расположение #uri
Вопрос:
Является ли это правильным URI для header('Location: ')
, конкретно ./
?
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: ./');
Спасибо.
Комментарии:
1. Вы пытаетесь добавить завершающую косую черту к URL-адресам? Есть лучшие способы сделать это.
2. Я пытаюсь выполнить постоянное перенаправление из файла, содержащего этот код, в файл по умолчанию (index.something), который содержится в той же папке, что и исходный файл, который сделал перенаправление.
3. Вы должны использовать абсолютный URI. Смотрите: w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
Ответ №1:
Вы также можете использовать:
header('Location: /', false, 301);
Я предполагаю, что вы хотите перенаправить на «домашнюю страницу», это было бы / вместо ./
Комментарии:
1. Привет, я хочу перенаправить в корень папки, где находится файл, содержащий этот код. В данном конкретном случае это также корень сайта. Я беспокоюсь, потому что я прочитал, что HTTP / 1.1 требует абсолютного пути.
2. Согласно стандарту, требуется абсолютный URL. Это будет работать, но недопустимо
3. Как упоминал @Pekka, см. w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
4. Я понимаю. Итак, существует ли
real
риск при использовании./
or/
?5. Спасибо за комментарии, не знал, что требуется абсолютный URL. Поддержал правильное решение.
Ответ №2:
Вы должны использовать абсолютный URI в соответствии со спецификацией, поэтому у вас должно сработать что-то вроде следующего:
// check if the server is secure or not to determine URL prefix
if(isset($_SERVER['HTTPS']) and 'on' === $_SERVER['HTTPS']) {
$location = 'https://';
} else {
$location = 'http://';
}
// get the servers base URL
$location .= $_SERVER['SERVER_NAME'] . '/';
// grab the current URI without a file name in it
$location .= dirname($_SERVER['REQUEST_URI']) . '/';
header('Location: ' . $location);
exit();