PHP ile non-WWW Redirect WWW

2 Cevap php

Ben temelde, PHP ile domain.com tüm www.domain.com isteklerini yönlendirmek istiyorum:

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

Ancak ben örneğin için, SO gibi istenen URL'yi sürdürmek istiyorum:

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

: Yönlendirmelidir

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

I .htaccess çözümlere güvenmek istemiyorum, ve ben bu gerçekleşmesi için kullanmak zorunda olan $_SERVER vars emin değilim. Ayrıca, HTTPS protokolünü koruyarak bir artı olacaktır.

Bunu nasıl yapmalıyım?

2 Cevap

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

Aynı sayfada, www kullanıcıyı yönlendirme olur. bozulmamış.

Yani, www kurtulmak için. , Biz sadece tek bir satırı değiştirin:

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

Ve bu çalışması gerekir.

Eğer bunları kullanmak yoksa bu portları ve bu tür ile birlikte, https:// sağlam tutar gibi arada, bu, Google tarafından önerilen yöntemdir.


Bamya işaret olarak yerine sunucunun başlıklarından geliyor gibi, o böylece $_SERVER['SERVER_*'] olarak güvenilir değildir, $_SERVER['HTTP_HOST'] kullanır. Sen $_SERVER['HTTP_HOST'] ile bazı $_SERVER['SERVER_NAME'] yerini alabilir ve aynı şekilde çalışması gerekir.

Bu deneyin:

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