Neden benim PHP uygulaması bir 404 hata göndermek değil mi?

14 Cevap php
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
    header('HTTP/1.0 404 Not Found');
}

Neden bu işi alışkanlık? Ben boş bir sayfa olsun.

14 Cevap

Sizin kod teknik olarak doğru. O boş sayfanın başlıklarına baktım, bir 404 başlık görmek istiyorum, ve diğer bilgisayarlara / programların dosya bulunamadı gibi doğru yanıtı tanımlamak mümkün olacaktır.

Tabii ki, kullanıcılar hala SOL vardır. Normalde, 404s web sunucusu tarafından işlenir.

  • Kullanıcı: Hey, bu URI web sunucusu benim için bir şey var mı?
  • Webserver: Hayır, bilmiyorum, 404! İşte 404s için gösterilecek bir sayfa bulunuyor.

Sorun web sunucusu PHP sayfayı işlemeye başladığında, bu zaten bir 404 işlemek noktaya iletilen, bir

  • Kullanıcı: Hey, bu URI web sunucusu benim için bir şey var mı?
  • Webserver: Evet, biliyorum, bir PHP sayfası. Bu yanıt kodu ne olduğunu söyleyeyim
  • PHP: Hey, OMG 404!!!
  • Webserver: Peki bok, 404 sayfa kişi zaten eve gitti, ben sadece ne PHP birlikte göndereceğiz bana verdi

404 başlık sağlamanın yanı sıra, PHP, şimdi gerçek bir 404 sayfa çıktısı için sorumludur.

That is correct behaviour, it's up to you to create the contents for the 404 page.
The 404 header is used by spiders and download-managers to determine if the file exists.
(A page with a 404 header won't be indexed by google or other search-engines)

Normal kullanıcılar ancak http-başlıkları bakmak ve normal bir sayfa olarak sayfayı kullanmayın.

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

Eğer son iki echo hatlarında bakarsanız içeriği göreceksiniz, nerede bu. İstediğiniz ancak bunu özelleştirebilirsiniz.

Kayıt için, bu her durum işleyicisi:

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");

$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->

Yük varsayılan sunucu 404 sayfa, eğer varsa, ö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();
}

5.4 php yana şimdi yapabileceğiniz http_response_code(404);

Biraz kısa versiyonu. Garip yankı bastır.

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

echo ifadeleri basitleştirmek, asla ve de neden sayfada bir substr çalıştırmak, yukarıdaki gibi yarı kolon asla unutmayacağım, biz kolayca sadece PHP_SELF çalıştırabilirsiniz

@ Kitet en dayalı 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);

Eğer denetim yok bir sunucuda barındırılan bir web sitesi programlama iseniz, "404missing.html" hangi dosya bilemezsiniz. Ancak yine de bunu yapabilirsiniz.

Bu şekilde, aynı sunucuda normal bir 404 sayfa tam olarak aynı sonucu verdi. Bir gözlemci 404 ve olmayan varolan bir sayfa döndürür varolan PHP sayfasına ayırt etmek mümkün olmayacaktır.

Eğer sunucunun varsayılan hata sayfası görüntülenmesini istiyorsanız, sunucu bu işlemek zorunda.

Bazı rafine kullanabilirsiniz doğru olsa da bunu yapıyoruz. Böylece en pratik uygulama faydalarını konuşalım ele alınmıştır gibi görünüyor:

Çok dilli teknik dokümanlar geniş bir koleksiyona sahiptir bizimki eski bir web sitesi bir else if koşullu içinde bu yürütülüyor:

    if (<no file found>){
        die("NO FILE HERE");
    }

(Yararsızdır mesaj ve kötü bir kullanıcı deneyimi dışında) Sorun genellikle kötü bağlantılar ve eksik belgeleri kontrol etmek (bizim durumumuzda bütünlük içinde) bir bağlantı paletli kullanmanız olmak. Bu, bir dosya var olduğunu bize anlatan bir mükemmel doğru 200 hata yanıtı elde edildi demektir. Dürüstlük yüzden biz elle php ile bir 404 başlık eklemek zorunda PDF beklediklerini bilmiyordum. (Sonradan hiçbir şey yürütmek istiyorum ve başlık her zaman herhangi bir render html önce olması gerektiğini çünkü) kalıbın üstünde kod ekleyerek, bütünlüğü (daha fazla ya da daha az bir tarayıcı gibi davranan) bir 404 dönecekti ve biz tam olarak nerede eksik aramaya bilemez dosyaları. Orada bir hata olduğunu kullanıcıya söylüyorum daha şık yolu vardır, ama bir 404 hatası sunarak (Ben inanıyorum-düzeltmek yanılıyorsam beni) de vardır tarayıcılar ve hata tarayıcı gibi programları bildiren ama değil sadece kolayca 404s için grep edebilirsiniz sunucu günlüklerinde bu hataları kayıt.

    header('HTTP/1.0 404 Not Found');
    die("NO FILE HERE");

ile deneyin:

header("Status: 404 Not Found");
header('HTTP/1.0 404 Not Found');

Bye!

Sen benim web ben böyle bir şey yarattı, biliyorum:

        $uri=$_SERVER['REQUEST_URI'];
        $strpos=strpos($uri, '.php');
        if ($strpos!==false){
        $e404="The page requested by you: &quot".$_SERVER['REQUEST_URI']."&quot, 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>");

}

ben size yardımcı olur umarım.

Eğer sunucunun varsayılan 404 sayfayı göstermek istiyorsanız, böyle bir çerçeve içinde yükleyebilirsiniz:

echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';