मैं PHP में 404 त्रुटि कैसे बना सकता हूं?


111

मेरे .htaccess सभी अनुरोधों को रीडायरेक्ट करता /word_hereहै /page.php?name=word_here। PHP स्क्रिप्ट तब जांचती है कि अनुरोधित पृष्ठ उसके पृष्ठों की सरणी में है या नहीं।

यदि नहीं, तो मैं 404 त्रुटि कैसे अनुकरण कर सकता हूं? मैंने यह करने की कोशिश की, लेकिन मेरे 404 पृष्ठ ErrorDocumentमें यह .htaccessप्रदर्शित नहीं हुआ।

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");

क्या मैं यह सोचकर सही हूं कि मेरी त्रुटि 404 पृष्ठ पर पुनर्निर्देशित करना गलत है?


तुम क्यों मतलब है कि यह काम नहीं करता है? क्या आपने सर्वर प्रतिक्रिया हेडर की जांच की?
गंबो

1
आपके निष्कर्ष के प्रश्न के उत्तर में, हाँ, सभी 404s को एक वास्तविक पृष्ठ पर पुनर्निर्देशित करना एक बुरा विचार होगा। यह HTTP कल्पना का उल्लंघन करके कुछ ऐसा है जो वहाँ नहीं होना चाहिए जो वहाँ है।
लुकास ओमान

जवाबों:


156

404 पेज बनाने के लिए अप-टू-डेट उत्तर (PHP 5.4 या नए के रूप में) का उपयोग करना है http_response_code:

<?php
http_response_code(404);
include('my_404.php'); // provide your own HTML for the error page
die();

die() कड़ाई से आवश्यक नहीं है, लेकिन यह सुनिश्चित करता है कि आप सामान्य निष्पादन जारी नहीं रखें।


मुझे इसे किस फ़ाइल में जोड़ना चाहिए?
जुल्फिकार

87

आप जो कर रहे हैं वह काम करेगा, और ब्राउज़र को 404 कोड प्राप्त होगा। यह ऐसा नहीं करेगा "" नहीं मिला "पृष्ठ प्रदर्शित करें जो आप उम्मीद कर रहे हैं, उदाहरण के लिए:

नहीं मिला

इस सर्वर पर अनुरोधित URL /test.php नहीं मिला।

ऐसा इसलिए है क्योंकि जब PHP 404 कोड (कम से कम अपाचे नहीं करता) तो वेब सर्वर उस पेज को नहीं भेजता है। PHP अपने सभी आउटपुट भेजने के लिए जिम्मेदार है। इसलिए यदि आप एक समान पेज चाहते हैं, तो आपको स्वयं HTML भेजना होगा, जैसे:

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include("notFound.php");
?>

Httpd.conf में इसे डालकर आप अपाचे को उसी 404 संदेशों के लिए उसी पृष्ठ का उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं:

ErrorDocument 404 /notFound.php

धन्यवाद। मुझे लगता है कि यह मेरे 404 पृष्ठ का इस्तेमाल किया था।
एरिक

@JW जहां उपरोक्त कोड का उपयोग किया जाएगा? वह कोड '.htaccess' फ़ाइल के लिए है।
मनोहर कुमार

@ManoharKumar उपरोक्त कोड उपयोग में जहाँ आप 404 पेज भेजना चाहते हैं। मेरे मामले में, मैंने उपयोग किया है जब कोई एक आइटम कोड के साथ खोजता है, लेकिन इसका अस्तित्व नहीं है। इसलिए मैं उस कोड का उपयोग करने के बाद पता लगाता हूं कि वह आइटम उपलब्ध नहीं है और मैंने 404 पृष्ठ के बाद कुछ भी लोड करने से बचने के लिए इस कोड की तीसरी पंक्ति पर भी निकास का उपयोग किया। धन्यवाद जेडब्ल्यू, यह मेरे लिए पूरी तरह से काम किया।
हर्षा

22

इसे इस्तेमाल करे:

<?php
header("HTTP/1.0 404 Not Found");
?>

3
अच्छी तरह से 404 HTTP 1.0 और 1.1 दोनों में 404 है। 1.0 एक सुरक्षित शर्त है। कूल जोक बीटीडब्लू :) +1
एट्स गोरल

मेरे मामले में मुझे हेडर देना होगा ("स्थान: एचटीटीपी / 1.0 404 नहीं मिला");
ईजीलर्न एकेडमी

9

.Htaccess फ़ाइल के माध्यम से कस्टम एरर पेज बनाएँ

1. 404 - पृष्ठ नहीं मिला

 RewriteEngine On
 ErrorDocument 404 /404.html

2. 500 - आंतरिक सर्वर त्रुटि

RewriteEngine On
ErrorDocument 500 /500.html

3. 403 - निषिद्ध

RewriteEngine On
ErrorDocument 403 /403.html

4. 400 - खराब अनुरोध

RewriteEngine On
ErrorDocument 400 /400.html

5. 401 - प्राधिकरण आवश्यक

RewriteEngine On
ErrorDocument 401 /401.html

आप सिंगल पेज पर सभी एरर को रीडायरेक्ट भी कर सकते हैं। पसंद

RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html

रिवरटाइंगइन का इससे कोई लेना-देना नहीं है; उसी परिणाम को प्राप्त करने के लिए उस लाइन को सुरक्षित रूप से छोड़ा जा सकता है।
वुड्रोशाइगरु जूल

3

हेडर भेजने के बाद क्या आपको मरना याद है? 404 हेडर स्वचालित रूप से प्रसंस्करण बंद नहीं करता है, इसलिए ऐसा प्रतीत हो सकता है कि आगे की प्रक्रिया हो रही है तो कुछ भी नहीं किया है।

यह आपके 404 पेज के लिए फिर से कनेक्ट करने के लिए अच्छा नहीं है, लेकिन आप इसमें बिना किसी समस्या के सामग्री को शामिल कर सकते हैं। इस तरह, आपके पास एक पृष्ठ है जो सही URL से 404 स्थिति को ठीक से भेजता है, लेकिन इसमें आपका "आप क्या खोज रहे हैं?" मानव पाठक के लिए पेज।


0

डालने का प्रयास करें

ErrorDocument 404 /(root directory)/(error file) 

में .htaccessफ़ाइल।

किसी भी त्रुटि के लिए ऐसा करें लेकिन अपनी त्रुटि के लिए 404 स्थानापन्न करें।


0

Drupal या Wordpress CMS (और संभवतः अन्य) में, यदि आप कुछ कस्टम php कोड बनाने की कोशिश कर रहे हैं, तो ऐसा प्रतीत नहीं होता है (जब तक कि कुछ शर्त पूरी न हो जाए), निम्नलिखित CMS के 404 हैंडलर को बनाकर अच्छा काम करता है:

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>

-2

उस पंक्ति के तुरंत बाद प्रतिक्रिया का उपयोग करके exitया बंद करने का प्रयास करेंdie()

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
exit;

या

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
die();

1
यदि आप ऐसा करते हैं, तो उपयोगकर्ता एक खाली पृष्ठ देखता है। मेरा प्रश्न यह था कि मैं उसी 404 पृष्ठ को कैसे भेजूं जिसे मैंने निर्दिष्ट किया था ErrorDocument, लेकिन PHP से।
एरिक

अगर आप ErrorDocument का उपयोग करना चाहते हैं, तो सुनिश्चित करें कि आपकी कस्टम त्रुटि फ़ाइल का पथ सर्वर उदाहरण के रूट के संबंध में है: कहते हैं कि आपका वर्चुअल पथ / folder1 / folder2 / myhtaccess है, जो सर्वर के मूल में है, जो आपकी त्रुटिपूर्णता कुछ इस तरह दिखाई देगी ErrorDocument 404
/folder1/folder2/my404.html

ErrorDocumentPHP कोड दर्ज करने के बाद आपके पास कोई प्रभाव नहीं पड़ता है। इस उत्तर में 9 साल पहले का
एरिक

मुझे उम्मीद है कि आपकी समस्या अब तक हल हो गई है। एक बंद विषय पर, मुझे लगता है कि यह बेहतर है कि आप के साथ पुनर्निर्देशित नहीं किया? नाम = word_here। इसके बजाय, $reqpath = strtok("/".trim(substr($_SERVER["REQUEST_URI"], strlen(APP_ROOT)), "/"), "?");अपने page.php फ़ाइल में उपयोग करें। Coz वहाँ एक परिदृश्य है जहाँ उन पृष्ठों में से एक उपयोगकर्ता से एक क्वेरी "नाम" की उम्मीद कर रहा है।
user5891645

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.