Перенаправление PHP на основе ИМЕНИ ХОСТА/СЕРВЕРА HTTP в том же домене


Я пытаюсь перенаправить на определенный путь на основе HTTP_HOST или ИМЯ_СЕРВЕРА с помощью PHP-скрипта.

Я пробовал эти сценарии:

1.

$domain = $_SERVER["SERVER_NAME"];
if (($domain == "example.dk") ||
   ($domain == "www.example.dk")) { 
   header("location: /index.php/da/forside"); 
}
?>

2.

switch ($host) {

        case 'example.dk':
                header("HTTP/1.1 301 Moved Permanently");
                header("Location: http://www.example.dk/index.php/da/forside/");
                exit();

        case 'www.example.dk':
                header("HTTP/1.1 301 Moved Permanently");
                header("Location: http://www.example.dk/index.php/da/forside/");
                exit();



        default:
                header("Location: http://www.example.se");
                exit();

                }
?>

И другие подобные сценарии. Либо страница загружается навсегда, либо браузер возвращает какую-то ошибку перенаправления.

Author: jman, 2010-10-07

3 answers

Хорошо, вот как я решил эту проблему:

<?php
$domain = $_SERVER["SERVER_NAME"];
$requri = $_SERVER['REQUEST_URI'];
if (($domain == "www.example.dk" && $requri == "/index.php"  ||
   $domain == "example.dk") )  { 
   Header( "HTTP/1.1 301 Moved Permanently" ); 
   header("location: http://www.example.dk/index.php/da/forside"); 
}

else if (($domain == "uk.example.dk" && $requri == "/index.php"  ||
   $domain == "www.uk.example.dk") )  {
   Header( "HTTP/1.1 301 Moved Permanently" );    
   header("location: http://uk.example.dk/index.php/en/uk/home"); 
}

else if (($domain == "www.example.se" && $requri == "/index.php"  ||
   $domain == "example.se") )  { 
   Header( "HTTP/1.1 301 Moved Permanently" ); 
   header("location: http://example.se/index.php/sv/hem"); 
}

?>

Похоже, мне нужно поле REQUEST_URI, иначе это не сработало бы.

 8
Author: jman, 2010-10-07 12:55:53

Наиболее распространенной ошибкой перенаправления является цикл перенаправления.

  1. Действительно ли сценарий заканчивается после вашего первого примера?
  2. Откуда берется $host?

Кроме того, ИМЯ_СЕРВЕРА обычно является глобальным именем, настроенным apache, HTTP_HOST - действительно правильный способ сделать это.

HTTP_HOST может содержать номер порта, имейте это в виду.

Итак, какой URL-адрес вашего скрипта и куда вы перенаправляете?

Простой способ отладки - повторить содержимое HTTP_HOST и вместо вызова функции header() также вызывайте "echo".

 0
Author: Evert, 2010-10-07 09:32:56

Потому что вы перенаправляете на один и тот же сервер(example.dk ) и ваш код выполняется снова и снова в цикле.

Вместо этого используйте этот код:

$domain = $_SERVER["SERVER_NAME"];
if (($domain == "example.dk" ||
   $domain == "www.example.dk") && !$_GET['redirected'])  { 
   header("location: /index.php/da/forside?redirected=1"); 
}
 0
Author: rahim asgari, 2010-10-07 09:34:38