PHP重定向基于同一域内的HTTP_HOST / SERVER_NAME

时间:2010-10-07 09:27:55

标签: php redirect dns

我正在尝试使用PHP脚本重定向到基于HTTP_HOST或SERVER_NAME的特定路径。

我试过这些脚本:

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 个答案:

答案 0 :(得分:8)

好的,这就是我解决它的方法:

<?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字段,否则它将无效。

答案 1 :(得分:0)

最常见的重定向错误是重定向循环。

  1. 在第一个示例之后脚本真的结束了吗?
  2. $ host来自哪里?
  3. 此外,SERVER_NAME通常是apache配置的全局名称,HTTP_HOST实际上是正确的方法。

    HTTP_HOST可能包含端口号,请记住这一点。

    那么你的脚本的url是什么,你在哪里重定向到?

    一种简单的调试方法是回显HTTP_HOST的内容,而不是调用header(),也称为'echo'。

答案 2 :(得分:0)

因为您正在重定向到同一服务器(example.dk),并且您的代码在循环中反复执行。

请改用此代码:

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