質問

私は基本的には、PHPでdomain.comのためにすべてのwww.domain.com要求をリダイレクトしたいです

if (substr($_SERVER['SERVER_NAME'], 0, 4) === 'www.')
{
    header('Location: http://' . substr($_SERVER['SERVER_NAME'], 4)); exit();
}

しかし、私は、例えばのためのSOのように要求されたURLを維持したいん:ます。

http://www.stackoverflow.com/questions/tagged/php?foo=bar

にリダイレクトする必要があります:

http://stackoverflow.com/questions/tagged/php?foo=bar

私は.htaccessソリューションに依存したくない、と私は、私はこれを実現するために使用する必要があるだろうVARSを$_SERVERが不明です。また、HTTPSプロトコルを維持することはプラスになります。

これはどのようにしたらよいでしょうか?

役に立ちましたか?

解決

$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
header('Location: '. $pageURL);

正確に同じページ、WWWにユーザーをリダイレクトします。そのまま。

ですから、WWWを取り除くために。 、私達はちょうど1行を置き換えます:

$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= substr($_SERVER['SERVER_NAME'], 4).":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= substr($_SERVER['SERVER_NAME'], 4).$_SERVER["REQUEST_URI"];
}
return $pageURL;

そして、それが動作するはずです。

ところで、これはあなたがそれらを使用しない場合、ポートなどと一緒に、そのままhttps://続けるよう、Googleが推奨される方法です。

<時間>

ガンボが指摘したように、それは代わりに、サーバのヘッダから来ているように、彼は$_SERVER['HTTP_HOST']を使用し、これ$_SERVER['SERVER_*']はとして信頼できるものではありません。あなたは$_SERVER['SERVER_NAME']でsome$_SERVER['HTTP_HOST']を置き換えることができ、それは同じように動作する必要があります。

他のヒント

これを試してください:

if (substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.') {
    header('Location: http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on' ? 's':'').'://' . substr($_SERVER['HTTP_HOST'], 4).$_SERVER['REQUEST_URI']);
    exit;
}

もし(ISSET($ _、SERVER [ 'HTTPS'])&&!空($ _、SERVER [ 'HTTPS'])&&(strtolower($ _、SERVER [ 'HTTPS'])!= 'オフ')){             
$ HTTPS = 1;
        }他{
            $ HTTPS = 0;
        }
        (SUBSTR($ _、SERVER [ 'HTTP_HOST']、0、4)!== 'WWW。'){
場合             ($ HTTPS( 'HTTPSを://': 'のhttp://'?」。$ _SERVER).'wwwを[ 'HTTP_HOST']。$ _、SERVER [ 'REQUEST_URI'])リダイレクト;
        }

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top