Birinin basit bir kurulumu (CentOS 7, Apache 2.4.x ve PHP 5.6.20) ve sadece bir web sitesi (sanal barındırma olduğunu varsaymıyor) olduğunu varsayarsak ...
PHP anlamda, $_SERVER['SERVER_NAME']
PHP'nin $_SERVER
süper küreselde httpd.conf'daki Apache yapılandırmanıza ( **ServerName**
direktif ile UseCanonicalName On
) dayalı olarak kaydedilen bir öğedir (dahil edilen sanal ana bilgisayar yapılandırma dosyasından, vb. Olsun). HTTP_HOST , HTTP host
üstbilgisinden türetilir . Bunu kullanıcı girişi olarak kabul edin. Kullanmadan önce filtreleyin ve doğrulayın.
İşte $_SERVER['SERVER_NAME']
bir karşılaştırma için temel olarak kullandığım bir örnek . Aşağıdaki yöntem, adlandırılmış ServerValidator
(çocuğu Validator
) adında somut bir çocuk sınıfından alınmıştır . ServerValidator
kullanmadan önce $ _SERVER içindeki altı veya yedi öğeyi kontrol eder.
HTTP isteğinin POST olup olmadığını belirlerken bu yöntemi kullanıyorum.
public function isPOST()
{
return (($this->requestMethod === 'POST') && // Ignore
$this->hasTokenTimeLeft() && // Ignore
$this->hasSameGETandPOSTIdentities() && // Ingore
($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')));
}
Bu yöntemin çağrılmasıyla, ilgili $ _SERVER öğelerinin tüm filtreleme ve doğrulama işlemleri gerçekleşir (ve ilgili özellikler ayarlanır).
Çizgi ...
($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')
... $_SERVER['HTTP_HOST']
(sonuçta istenen host
HTTP üstbilgisinden türetilmiş) değerin eşleşip eşleşmediğini denetler $_SERVER['SERVER_NAME']
.
Şimdi, benim örnek açıklamak için süper küresel konuşmasına kullanıyorum, ama bu bazı insanlar aşina sırf olduğunu INPUT_GET
, INPUT_POST
ve INPUT_SERVER
açısından etmek filter_input_array()
.
Sonuçta sürece benim sunucuda POST isteklerini ilgilenmem, olan bütün dört şartlar yerine getirildiği. Bu nedenle, POST istekleri açısından, bir HTTP host
üstbilgisi sağlanamaması (daha önce test edilmiş olma durumu) katı HTTP 1.0 tarayıcıları için kıyameti yazmaktadır. Dahası, istenen konak değerle aynı olmalıdır için de httpd.conf için, genişleme yoluyla, değer ve içinde superglobal. Yine, ben PHP filtre fonksiyonları ile kullanmak istiyorsunuz, ama benim sürüklenme yakalamak.ServerName
$_SERVER('SERVER_NAME')
$_SERVER
INPUT_SERVER
Apaçi sık kullandığını göz önünde bulundurun ServerName
içinde standart yönlendirmeler : (Örnek, böyle bir URL'ye kapalı eğik çizgiyi bırakarak olarak http://www.foo.com olma http://www.foo.com/ sen olmasa bile,) URL yeniden yazma özelliğini kullanarak.
$_SERVER['SERVER_NAME']
Standart olarak kullanıyorum , değil $_SERVER['HTTP_HOST']
. Bu konuda ileri geri birçok şey var. $_SERVER['HTTP_HOST']
boş olabilir, bu nedenle yukarıdaki genel yöntemim gibi kod kuralları oluşturmak için temel olmamalıdır. Ancak, her ikisinin de ayarlanabilmesi, eşit olacaklarını garanti etmez. Test, emin olmak için en iyi yoldur (Apache sürümü ve PHP sürümü dikkate alınarak).