if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Neden bu işe yaramayacak? Boş bir sayfa alıyorum.
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Neden bu işe yaramayacak? Boş bir sayfa alıyorum.
Yanıtlar:
Kodunuz teknik olarak doğrudur. Bu boş sayfanın başlıklarına bakarsanız, bir 404 başlığı görürsünüz ve diğer bilgisayarlar / programlar yanıtı dosya bulunamadığı gibi doğru bir şekilde tanımlayabilir.
Tabii ki, kullanıcılarınız hala SOL. Normalde, 404'ler web sunucusu tarafından işlenir.
Sorun, web sunucusu PHP sayfasını işlemeye başladığında, 404'ü işleyeceği noktayı zaten geçti.
Bir 404 üstbilgisi sağlamanın yanı sıra, PHP artık gerçek 404 sayfasının çıktısından sorumludur.
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>";
echo "The page that you have requested could not be found.";
exit();
}
Son iki yankı çizgisine bakarsanız, içeriği burada görebilirsiniz. İstediğiniz gibi özelleştirebilirsiniz.
Bu doğru davranış , 404 sayfasının içeriğini oluşturmak size kalmış.
404 üstbilgisi, dosyanın var olup olmadığını belirlemek için örümcekler ve indirme yöneticileri tarafından kullanılır.
(404 başlığı olan bir sayfa google veya diğer arama motorları tarafından dizine eklenmez)
Ancak normal kullanıcılar http başlıklarına bakmaz ve sayfayı normal sayfa olarak kullanmaz.
Kayıt için, bu her durumda işleyicidir:
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->
die()
gerekli?
Varsa, varsayılan sunucu 404 sayfasını yükleyin, örneğin apache için tanımlanmış:
if(strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
readfile('404missing.html');
exit();
}
Php 5.4 beri şimdi yapabilirsiniz http_response_code(404);
@ Kitet'e dayanan başka bir çözüm.
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
//If you don't know which web page is in use, use any page that doesn't exists
$handle = curl_init('http://'. $_SERVER["HTTP_HOST"] .'/404missing.html');
curl_exec($handle);
Kontrolünüz olmayan bir sunucuda barındırılan bir web sitesini programlıyorsanız, hangi dosyanın "404missing.html" olduğunu bilmezsiniz. Ancak yine de bunu yapabilirsiniz.
Bu şekilde, aynı sunucuda normal bir 404 sayfasının tam olarak aynı sonucunu verdiniz. Bir gözlemci, var olan bir PHP sayfasının döndürdüğü 404 ile var olmayan bir sayfayı ayırt edemez.
Biraz daha kısa versiyon. Garip yankıyı bastırın.
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
exit("<h1>404 Not Found</h1>\nThe page that you have requested could not be found.");
}
if($_SERVER['PHP_SELF'] == '/index.php'){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>";
echo "The page that you have requested could not be found.";
die;
}
yankı ifadelerini asla basitleştirmeyin ve yukarıdaki gibi iki nokta üst üste işaretini asla unutma, ayrıca sayfada bir alt dizeyi çalıştırdığımızda kolayca php_self çalıştırabiliriz
Bazı rafineri kullanabilmesine rağmen doğru yapıyorsunuz. Görünen o ki pratik uygulama avantajlarından bahsedelim:
Çok dilli teknoloji dokümanlarından oluşan geniş bir koleksiyona sahip eski bir web sitemiz bunu başka bir koşullu koşulda yürütüyordu:
if (<no file found>){
die("NO FILE HERE");
}
Sorun (yararsız mesaj ve kötü kullanıcı deneyiminin yanı sıra) genellikle kötü bağlantıları ve eksik belgeleri kontrol etmek için bir bağlantı tarayıcı (bizim durumumuzda bütünlük) kullandığımızdır. Bu, orada bir dosya olduğunu bize bildiren mükemmel bir şekilde 200 hata yanıtı aldığımız anlamına gelir. Dürüstlük, bir PDF beklediğimizi bilmiyordu, bu yüzden elle bir php ile 404 başlığı eklemek zorunda kaldık. Kodunuzu kalıbın üstüne ekleyerek (daha sonra hiçbir şey yürütülmeyecek ve başlık her zaman herhangi bir oluşturulan html'den önce olmalıdır), bütünlük (bir tarayıcı gibi az ya da çok davranan) bir 404 döndürür ve tam olarak nerede kayıp arayacağımızı bileceğiz Dosyalar. Kullanıcıya bir hata olduğunu söylemenin daha zarif yolları vardır,
header('HTTP/1.0 404 Not Found');
die("NO FILE HERE");
Bunu dene:
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
echo "<head><title>404 Not Found</title></head>";
echo "<h1>Not Found</h1>";
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
echo "<p>The requested URL ".$uri." was not found on this server.</p>";
exit();
}
Bilirsiniz, web sitemde böyle bir şey yarattım:
$uri=$_SERVER['REQUEST_URI'];
$strpos=strpos($uri, '.php');
if ($strpos!==false){
$e404="The page requested by you: "".$_SERVER['REQUEST_URI']."", doesn't exists on this server.";
$maybe=str_replace('.php','',$uri);
$maybe=str_replace('/','',$maybe);
die("<center><h1>404</h1><hr><h3>$e404</h3><h3>Maybe try <a href=$maybe>www.leaveyortexthere.p.ht/$maybe</a>?</center>");
}
umarım sana yardımcı olur.
Bu soruna geldim .. Sunucunuzda var olmayan bir bağlantıya yönlendirme hile yapabilir! Sunucu 404'ünü döndüreceği için:
header('Redirect abbb.404.nonexist');
<bu kesin olarak mevcut değil
Sunucunun varsayılan 404 sayfasını göstermek istiyorsanız, bunu aşağıdaki gibi bir çerçeveye yükleyebilirsiniz:
echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';