Перенаправление 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();
}
?>
И другие подобные сценарии. Либо страница загружается навсегда, либо браузер возвращает какую-то ошибку перенаправления.
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, иначе это не сработало бы.
Наиболее распространенной ошибкой перенаправления является цикл перенаправления.
- Действительно ли сценарий заканчивается после вашего первого примера?
- Откуда берется $host?
Кроме того, ИМЯ_СЕРВЕРА обычно является глобальным именем, настроенным apache, HTTP_HOST - действительно правильный способ сделать это.
HTTP_HOST может содержать номер порта, имейте это в виду.
Итак, какой URL-адрес вашего скрипта и куда вы перенаправляете?
Простой способ отладки - повторить содержимое HTTP_HOST и вместо вызова функции header() также вызывайте "echo".
Потому что вы перенаправляете на один и тот же сервер(example.dk ) и ваш код выполняется снова и снова в цикле.
Вместо этого используйте этот код:
$domain = $_SERVER["SERVER_NAME"];
if (($domain == "example.dk" ||
$domain == "www.example.dk") && !$_GET['redirected']) {
header("location: /index.php/da/forside?redirected=1");
}