if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Mengapa ini tidak berhasil? Saya mendapatkan halaman kosong.
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Mengapa ini tidak berhasil? Saya mendapatkan halaman kosong.
Jawaban:
Kode Anda secara teknis benar. Jika Anda melihat tajuk halaman kosong itu, Anda akan melihat tajuk 404, dan komputer / program lain akan dapat mengidentifikasi respons dengan benar karena file tidak ditemukan.
Tentu saja, pengguna Anda masih SOL. Biasanya, 404 ditangani oleh server web.
Masalahnya adalah, begitu server web mulai memproses halaman PHP, itu sudah melewati titik di mana ia akan menangani 404
Selain menyediakan header 404, PHP sekarang bertanggung jawab untuk menghasilkan halaman 404 yang sebenarnya.
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();
}
Jika Anda melihat dua baris gema terakhir, di situlah Anda akan melihat kontennya. Anda dapat menyesuaikannya sesuka Anda.
Itu perilaku yang benar , terserah Anda untuk membuat konten untuk halaman 404.
Header 404 digunakan oleh spider dan manajer unduhan untuk menentukan apakah file itu ada.
(Halaman dengan header 404 tidak akan diindeks oleh google atau mesin pencari lainnya)
Namun pengguna normal tidak melihat http-header dan menggunakan halaman sebagai halaman normal.
Sebagai catatan, ini adalah penangan kasus:
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->
die()
diperlukan?
Muat halaman server default 404, jika Anda memilikinya, misalnya ditentukan untuk apache:
if(strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
readfile('404missing.html');
exit();
}
Karena php 5.4 sekarang dapat Anda lakukan http_response_code(404);
Solusi lain, berdasarkan @ Kitet's.
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);
Jika Anda memprogram situs web yang dihosting di server yang tidak Anda kendalikan, Anda tidak akan tahu file mana yang merupakan "404missing.html". Namun Anda masih bisa melakukan ini.
Dengan cara ini, Anda memberikan hasil yang sama persis dengan halaman 404 normal di server yang sama. Pengamat tidak akan dapat membedakan antara halaman PHP yang ada menghasilkan 404 dan halaman yang tidak ada.
Versi yang sedikit lebih pendek. Menekan gema aneh.
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;
}
tidak pernah menyederhanakan pernyataan gema, dan tidak pernah melupakan titik koma seperti di atas, juga mengapa menjalankan substr pada halaman, kita dapat dengan mudah menjalankan php_self
Anda melakukannya dengan benar meskipun itu bisa menggunakan pemurnian. Sepertinya itu sudah diatasi jadi mari kita bicara manfaat aplikasi praktis:
Sebuah situs web lama milik kami yang memiliki banyak koleksi dokumen teknologi multibahasa menjalankan ini di dalam kondisi yang lain:
if (<no file found>){
die("NO FILE HERE");
}
Masalahnya (selain pesan yang tidak membantu dan pengalaman pengguna yang buruk) adalah bahwa kami biasanya menggunakan perayap tautan (dalam integritas kasus kami) untuk memeriksa tautan buruk dan dokumen yang hilang. Ini berarti bahwa kami mendapatkan jawaban benar yang benar 200 tidak ada kesalahan memberitahu kami bahwa ada file di sana. Integritas tidak tahu bahwa kami mengharapkan PDF, jadi kami harus menambahkan header 404 secara manual dengan php. Dengan menambahkan kode Anda di atas dadu (karena tidak ada yang akan dieksekusi dan tajuk harus selalu ada sebelum html apa pun yang diberikan), integritas (yang berperilaku kurang lebih seperti peramban) akan mengembalikan 404 dan kami akan tahu persis ke mana harus mencari yang hilang. file. Ada cara yang lebih elegan untuk memberi tahu pengguna bahwa ada kesalahan,
header('HTTP/1.0 404 Not Found');
die("NO FILE HERE");
Coba ini:
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();
}
Anda tahu, di situs web saya, saya membuat sesuatu seperti ini:
$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>");
}
Saya harap ini membantu Anda.
Saya menemukan masalah ini .. Saya pikir bahwa mengarahkan ulang ke tautan yang tidak ada di server Anda mungkin melakukan trik! Karena server akan mengembalikan 404-nya:
header('Redirect abbb.404.nonexist');
<itu tidak ada pasti
Jika Anda ingin menampilkan halaman 404 default server, Anda dapat memuatnya dalam bingkai seperti ini:
echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';