質問
私は基本的には、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'])リダイレクト;
}