Формат URI местоположения перенаправления PHP 301

#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();