if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
ทำไมถึงใช้งานไม่ได้ ฉันได้รับหน้าว่าง
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
ทำไมถึงใช้งานไม่ได้ ฉันได้รับหน้าว่าง
คำตอบ:
รหัสของคุณถูกต้องทางเทคนิค หากคุณดูที่ส่วนหัวของหน้าว่างคุณจะเห็นส่วนหัว 404 และคอมพิวเตอร์ / โปรแกรมอื่น ๆ จะสามารถระบุการตอบสนองได้อย่างถูกต้องเนื่องจากไม่พบไฟล์
แน่นอนผู้ใช้ของคุณยังคง SOL โดยปกติเว็บเซิร์ฟเวอร์จะจัดการ 404 วินาที
ปัญหาคือเมื่อเว็บเซิร์ฟเวอร์เริ่มประมวลผลหน้า PHP ก็ผ่านจุดที่มันจะจัดการ 404
นอกเหนือจากการจัดเตรียมส่วนหัว 404 ปัจจุบัน PHP มีหน้าที่รับผิดชอบในการแสดงผลหน้าจริง 404
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();
}
หากคุณดูที่สองเส้นเสียงก้องนั่นคือสิ่งที่คุณจะเห็นเนื้อหา คุณสามารถปรับแต่งได้ตามที่คุณต้องการ
นั่นคือพฤติกรรมที่ถูกต้องมันขึ้นอยู่กับคุณที่จะสร้างเนื้อหาสำหรับหน้า 404
ส่วนหัว 404 ถูกใช้โดยสไปเดอร์และตัวจัดการดาวน์โหลดเพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่
(หน้าเว็บที่มีส่วนหัว 404 จะไม่ถูกสร้างดัชนีโดย Google หรือเครื่องมือค้นหาอื่น ๆ )
ผู้ใช้ทั่วไปไม่ดู http-headers และใช้หน้าเป็นหน้าปกติ
สำหรับบันทึกนี้เป็นตัวจัดการทุกกรณี:
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->
die()
ต้อง?
โหลดหน้าเซิร์ฟเวอร์เริ่มต้น 404 หากคุณมีหนึ่งหน้าเช่นกำหนดไว้สำหรับ Apache
if(strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
readfile('404missing.html');
exit();
}
ตั้งแต่ php 5.4 คุณสามารถทำได้ http_response_code(404);
อีกวิธีการหนึ่งขึ้นอยู่กับ @ 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);
หากคุณกำลังเขียนโปรแกรมเว็บไซต์ที่โฮสต์ในเซิร์ฟเวอร์ที่คุณไม่มีการควบคุมคุณจะไม่ทราบว่าไฟล์ใดคือ "404missing.html" อย่างไรก็ตามคุณยังสามารถทำสิ่งนี้ได้
ด้วยวิธีนี้คุณให้ผลลัพธ์เดียวกันกับหน้า 404 ปกติบนเซิร์ฟเวอร์เดียวกัน ผู้สังเกตการณ์จะไม่สามารถแยกความแตกต่างระหว่างหน้า PHP ที่มีอยู่ส่งคืน 404 และหน้าเว็บที่ไม่มีอยู่
ลองด้วย:
header("Status: 404 Not Found");
header('HTTP/1.0 404 Not Found');
บาย!
รุ่นที่สั้นกว่าเล็กน้อย ระงับเสียงสะท้อนแปลก ๆ
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 ง่ายขึ้นและอย่าลืมเซมิโคลอนเหมือนด้านบนและทำไมเรียกใช้ substr บนหน้าเราสามารถรัน php_self ได้อย่างง่ายดาย
หากคุณต้องการให้หน้าแสดงข้อผิดพลาดเริ่มต้นของเซิร์ฟเวอร์คุณต้องจัดการกับสิ่งนี้ในเซิร์ฟเวอร์
คุณทำถูกต้องแม้ว่าจะสามารถใช้การกลั่นได้ ดูเหมือนว่าได้รับการแก้ไขดังนั้นให้พูดคุยประโยชน์ของการใช้งานจริง:
เว็บไซต์เก่าของเราที่มีคอลเลกชันเอกสารเทคโนโลยีหลายภาษาจำนวนมากกำลังทำงานอยู่ภายในเงื่อนไขอื่น:
if (<no file found>){
die("NO FILE HERE");
}
ปัญหา (นอกเหนือจากข้อความที่ไม่ช่วยเหลือและประสบการณ์การใช้งานที่ไม่ดี) ซึ่งโดยทั่วไปแล้วเราใช้โปรแกรมรวบรวมลิงค์ (ในกรณีที่ใช้งานจริง) เพื่อตรวจสอบลิงค์ที่ไม่ดีและเอกสารที่หายไป ซึ่งหมายความว่าเราได้รับการแก้ไขข้อผิดพลาดอย่างสมบูรณ์แบบ 200 โดยบอกว่ามีไฟล์อยู่ที่นั่น ความถูกต้องไม่ทราบว่าเราคาดหวัง PDF ดังนั้นเราจึงต้องเพิ่มส่วนหัว 404 ด้วย php ด้วยตนเอง ด้วยการเพิ่มโค้ดของคุณเหนือความตาย (เพราะไม่มีอะไรหลังจากนั้นจะดำเนินการและส่วนหัวควรอยู่ก่อน HTML ใด ๆ ต่อไป) ความสมบูรณ์ (ซึ่งมีพฤติกรรมมากกว่าหรือน้อยกว่าเช่นเบราว์เซอร์) จะกลับ 404 และเราจะรู้ว่า ไฟล์ มีวิธีที่สวยงามกว่าในการบอกผู้ใช้ว่ามีข้อผิดพลาด
header('HTTP/1.0 404 Not Found');
die("NO FILE HERE");
ลองสิ่งนี้:
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();
}
คุณจะรู้ว่าในเว็บไซต์ของฉันฉันสร้างบางสิ่งเช่นนี้:
$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>");
}
ฉันหวังว่ามันจะช่วยคุณ
ฉันพบปัญหานี้ .. ฉันคิดว่าการเปลี่ยนเส้นทางไปยังลิงก์ที่ไม่มีอยู่ในเซิร์ฟเวอร์ของคุณอาจเป็นการหลอกลวง! เพราะเซิร์ฟเวอร์จะคืนค่า 404 ของเขา:
header('Redirect abbb.404.nonexist');
<ที่ไม่มีอยู่แน่นอน
หากคุณต้องการแสดงหน้า 404 ที่เป็นค่าเริ่มต้นของเซิร์ฟเวอร์คุณสามารถโหลดในกรอบดังนี้:
echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';