2011-04-21 8 views
7

Czy jest to poprawny identyfikator URI dla header('Location: '), w szczególności ./?Przekierowanie PHP 301 do formatu identyfikatora URI

header ('HTTP/1.1 301 Moved Permanently'); 
header ('Location: ./'); 

Dziękuję.

+1

Czy próbujesz dodać ukośny ukośnik do adresów URL? Są lepsze sposoby na zrobienie tego. –

+0

Próbuję przekierować na stałe z pliku zawierającego ten kod do domyślnego pliku (index.something), który jest zawarty w tym samym folderze co plik początkowy, w którym nastąpiło przekierowanie. – Francisc

+2

Powinieneś używać bezwzględnego identyfikatora URI. Zobacz: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30 – Treffynnon

Odpowiedz

5

Musisz użyć absolute URI according to the spec więc coś jak następujące czynności powinny zadziałać:

// 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(); 
+0

Dziękuję, Treffynnon. – Francisc

7

Można również użyć:

header('Location: /', false, 301); 

zakładam chcesz przekierować do „głównej”, że byłoby/zamiast ./

+0

Witam, chcę przekierować do katalogu głównego folderu, w którym znajduje się plik zawierający ten kod. W tym konkretnym przypadku jest to także podstawa witryny. Martwię się, ponieważ czytam HTTP/1.1 wymaga bezwzględnej ścieżki. – Francisc

+2

Zgodnie ze standardem wymagany jest bezwzględny adres URL. To zadziała, ale nie będzie ważne –

+2

Jak wspomniano o @Pekka, zobacz http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30 – Treffynnon