سؤال

أرغب في إعادة توجيه جميع طلبات www.domain.com إلى domain.com مع php ، بشكل أساسي:

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

ومع ذلك ، أرغب في الحفاظ على عنوان URL المطلوب كما في SO ، على سبيل المثال:

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

يجب إعادة توجيه إلى:

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

لا أريد الاعتماد عليها .htaccess الحلول ، وأنا غير متأكد من $_SERVER VARS يجب أن أستخدمها لتحقيق ذلك. أيضا ، فإن الحفاظ على بروتوكول 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. سليم.

لذلك ، للتخلص من شبكة الاتصالات العالمية. ، نستبدل سطرًا واحدًا فقط:

$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;

وهذا يجب أن يعمل.

بالمناسبة ، هذه هي الطريقة التي ينصح بها Google ، كما تحتفظ بها https:// سليمة ، جنبا إلى جنب مع المنافذ وما إذا كنت تستخدمها.


كما أشار Gumbo ، يستخدم $_SERVER['HTTP_HOST'] لأنه يأتي من الرؤوس بدلاً من الخادم ، وبالتالي $_SERVER['SERVER_*'] ليس موثوقا. يمكنك استبدال بعض$_SERVER['SERVER_NAME'] مع $_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;
}

if (isset ($ _ server ['https']) &&! فارغة ($ _ server ['https']) && (strtoLower ($ _ server ['https'])! = 'OFF'))
$ https = 1 ؛
} آخر {
$ https = 0 ؛
}
if (substr ($ _ server ['http_host'] ، 0 ، 4)! == 'www.') {
إعادة التوجيه (($ https؟ 'https: //': 'http: //') .'www. '. $ _server [' http_host ']. $ _ server [' request_uri ']) ؛
}

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top