আমার পিএইচপি অ্যাপটি কেন 404 ত্রুটি পাঠাবে না?


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

কেন এই কাজ অভ্যাস? আমি একটি ফাঁকা পৃষ্ঠা পেয়েছি।


1
404 টি স্থিতি প্রেরণ করা এবং আপনার কাস্টম 404 পৃষ্ঠা অবিলম্বে অন্তর্ভুক্ত করা ভাল বিকল্প। এটাই আমি করতাম।
রকি 7

আমার পিএইচপি সার্ভারে এটি পুরোপুরি কাজ করে works উপরের লাইনটি সার্ভারের ডিফল্ট 404 পৃষ্ঠা দেয়। আমি মনে করি এটি সার্ভারে কনফিগার করা যায়।
এলমু

উত্তর:


306

আপনার কোডটি প্রযুক্তিগতভাবে সঠিক। আপনি যদি এই ফাঁকা পৃষ্ঠাটির শিরোনামগুলি দেখে থাকেন তবে আপনি একটি 404 শিরোলেখ দেখতে পাবেন এবং অন্যান্য কম্পিউটার / প্রোগ্রামগুলি ফাইলটি খুঁজে না পাওয়া হিসাবে প্রতিক্রিয়াটি সঠিকভাবে সনাক্ত করতে সক্ষম হবে।

অবশ্যই, আপনার ব্যবহারকারীরা এখনও SOL। সাধারণত 404s ওয়েব সার্ভার দ্বারা পরিচালিত হয়।

  • ব্যবহারকারী: আরে, আপনার এই ইউআরআই ওয়েবসভারে আমার জন্য কিছু আছে?
  • ওয়েবসার্ভার: না, আমি না, 404! 404s জন্য প্রদর্শিত একটি পৃষ্ঠা এখানে।

সমস্যাটি হ'ল, একবার ওয়েব সার্ভার পিএইচপি পৃষ্ঠার প্রসেসিং শুরু করার পরে, ইতিমধ্যে এটি পয়েন্টটি পেরিয়ে গেছে যেখানে এটি 404 হ্যান্ডেল করবে

  • ব্যবহারকারী: আরে, আপনার এই ইউআরআই ওয়েবসভারে আমার জন্য কিছু আছে?
  • ওয়েবসার্ভার: হ্যাঁ, আমি এটি একটি পিএইচপি পৃষ্ঠা। এটি আপনাকে জানাবে যে প্রতিক্রিয়া কোডটি কী
  • পিএইচপি: আরে, ওএমজি 404 !!!!!!!
  • ওয়েবসার্ভার: ওয়েল ক্রেপ, 404 পৃষ্ঠাগুলির লোকেরা ইতিমধ্যে বাড়িতে চলে গেছে, তাই আমি পিএইচপি আমাকে যা দিয়েছি কেবল তা দিয়ে পাঠিয়ে দেব

404 শিরোলেখ সরবরাহ করার পাশাপাশি, পিএইচপি এখন আসল 404 পৃষ্ঠা আউটপুট করার জন্য দায়বদ্ধ।


49
14 বছর বয়সী মেয়ে বা না, ছোট্ট ছদ্মবেশী ডায়ালগটি সত্যিই আমার কাছে এটি উপলব্ধি করেছে।
rb whitaker

20
পিএইচপি তখন 14 বছর পিছনে ছিল
অ্যাডাম লিঞ্চ

1
স্ট্যাকের জন্য স্ট্যাক ওভারফ্লোটির কার্যকারিতা +1 এ যুক্ত করতে হবে। এটি +1 এর সবই পাবেন।
জে কুইরিডো

30
এভাবেই ডকুমেন্টেশন লেখা উচিত! বিশেষত অ্যাপাচি ডকুমেন্টেশন, যা আমি সত্যিই ঘৃণা করি :)
হ্যারি

4
রক্তাক্ত উজ্জ্বলভাবে ব্যাখ্যা! আমার দিন তৈরি!
আন্দ্রে ক্রিশ্চিয়ান প্রোডান

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

আপনি যদি শেষ দুটি প্রতিধ্বনির লাইনটি দেখেন তবে সেখানে আপনি সামগ্রীটি দেখতে পাবেন। আপনি চাইলে এটি কাস্টমাইজ করতে পারেন।


74

এটি সঠিক আচরণ , 404 পৃষ্ঠার বিষয়বস্তু তৈরি করা আপনার পক্ষে।
404 হেডারটি ফাইলটি বিদ্যমান কিনা তা নির্ধারণ করতে মাকড়সা এবং ডাউনলোড-পরিচালকরা ব্যবহার করেন is
(404 শিরোলেখযুক্ত একটি পৃষ্ঠা গুগল বা অন্যান্য অনুসন্ধান ইঞ্জিন দ্বারা সূচিযুক্ত করা হবে না)

সাধারণ ব্যবহারকারীরা তবে HTTP- শিরোনামের দিকে তাকান না এবং পৃষ্ঠাটিকে একটি সাধারণ পৃষ্ঠা হিসাবে ব্যবহার করেন।


20
এফডব্লিউআইডাব্লু, 404 এর পরিবর্তে, আইই বিষয়বস্তু সংক্ষিপ্ত থাকলে এটির স্ট্যান্ডার্ড 'না পাওয়া' পৃষ্ঠায় ফিরে আসে (এটি ধরে নেয় সার্ভারটি কেবল 'পাওয়া যায়নি' বলেছে এবং ব্যবহারকারীকে একটি সুন্দর পৃষ্ঠা প্রদর্শন করার সিদ্ধান্ত নিয়েছে)।
সার্জ ওয়াটিয়ার

16

রেকর্ডের জন্য, এটি সর্ব-কেস হ্যান্ডলার:

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

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

হয় die()প্রয়োজনীয়?
ড্যানিয়েল মনিকাকে পুনরায়

না, কেবল সেই জিনিসগুলি ফাইলের শীর্ষে রাখুন, তারপরে একটি কাস্টম 404 পৃষ্ঠা নিয়ে এগিয়ে যান।
সিলভিউ-মেরিয়ান

14

ডিফল্ট সার্ভার 404 পৃষ্ঠা লোড করুন, যদি আপনার একটি থাকে, যেমন অ্যাপাচি জন্য সংজ্ঞায়িত:

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

এটি কাজ করছে না, এটি দেখাচ্ছে সতর্কতা: রিডফিল (404 মিসিং এইচটিএমএল): স্ট্রিমটি খুলতে ব্যর্থ হয়েছে: 61

2
@ এমবি এর কারণ আপনাকে নিজেরাই সেই ফাইলটি তৈরি করতে হবে।
সুপার ক্যাট

ধন্যবাদ @SuperCat, এখন আমি ভুল পুনরায় পাঠ এবং সবকিছু এখন স্পষ্ট।


4

@ কিট এর ভিত্তিতে আর একটি সমাধান।

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 পৃষ্ঠার ঠিক একই ফলাফল সরবরাহ করেছেন। একটি পর্যবেক্ষক একটি বিদ্যমান পিএইচপি পৃষ্ঠা 404 এবং একটি বিদ্যমান নেই এমন পৃষ্ঠার মধ্যে পার্থক্য করতে সক্ষম হবেন না।


4

সাথে চেষ্টা করুন:

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

বিদায়!


2

একটু সংক্ষিপ্ত সংস্করণ। বিজোড় প্রতিধ্বনি দমন করুন।

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.");
}

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

প্রতিধ্বনি বিবৃতিগুলি কখনও সরলকরণ করবেন না এবং উপরের মতো আধা কোলনটি কখনও ভুলবেন না, এছাড়াও পৃষ্ঠায় একটি সাবস্ট্রার চালান কেন, আমরা সহজেই পিএইচপি_সেলফ চালাতে পারি


2
কারণ REQUEST_URI পিএইচপিএসএসএলএফের মতো নয়। বিশেষত আপনার যদি ইউআরএল পুনর্লিখন থাকে।
টিমো হুভিনেন

1

আপনি যদি সার্ভারের ডিফল্ট ত্রুটি পৃষ্ঠাটি প্রদর্শন করতে চান তবে আপনাকে এটি সার্ভারে পরিচালনা করতে হবে।


1

আপনি এটি সঠিকভাবে করছেন তবে এটি কিছু পরিমার্জন ব্যবহার করতে পারে। দেখে মনে হচ্ছে এটি সম্বোধন করা হয়েছে তাই আসুন ব্যবহারিক প্রয়োগের সুবিধার কথা বলি:

আমাদের একটি পুরাতন ওয়েবসাইট যা বহুভাষিক প্রযুক্তি ডক্সের একটি বৃহত সংগ্রহ রয়েছে এটি অন্য কোনও শর্তসাপেক্ষে এটি সম্পাদন করছে:

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

সমস্যা (অপ্রত্যাশিত বার্তা এবং খারাপ ব্যবহারকারীর অভিজ্ঞতা ছাড়াও) সমস্যাটি হ'ল আমরা সাধারণত খারাপ লিঙ্কগুলি এবং নিখোঁজ নথিগুলি যাচাই করতে একটি লিঙ্ক ক্রলার (আমাদের ক্ষেত্রে নিখরচায়) ব্যবহার করি। এর অর্থ হ'ল আমরা একটি সঠিকভাবে 200 টি ভুল ত্রুটিযুক্ত প্রতিক্রিয়া পেয়েছিলাম যে সেখানে একটি ফাইল আছে তা আমাদের জানিয়েছে। অখণ্ডতা জানত না যে আমরা একটি পিডিএফ প্রত্যাশা করছি সুতরাং আমাদের পিএইচপি সহ ম্যানুয়ালি একটি 404 শিরোনাম যুক্ত করতে হবে। ডাইর উপরে আপনার কোড যুক্ত করে (কারণ এর পরে কিছুই কার্যকর হবে না এবং শিরোনাম সবসময় যে কোনও উপস্থাপিত এইচটিএমএল এর আগে হওয়া উচিত), অখণ্ডতা (যা ব্রাউজারের মতো কমবেশি আচরণ করে) 404 ফেরত আসবে এবং আমরা ঠিক কোথায় খুঁজে যাব ঠিক তা জানতে পারি নথি পত্র. ব্যবহারকারীকে বলার আরও মার্জিত উপায় রয়েছে যে এখানে একটি ত্রুটি রয়েছে,

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

1

এটা চেষ্টা কর:

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

0

আপনি জানেন, আমার ওয়েবসাইটে আমি এই জাতীয় কিছু তৈরি করেছি:

        $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>");

}

আমি এটি আপনাকে সাহায্য করে আশা করি.


-4

আমি এই সমস্যায় এসেছি .. আমি মনে করি আপনার সার্ভারে কোনও বিদ্যমান লিঙ্কে পুনর্নির্দেশ করা কৌশলটি করতে পারে! কারণ সার্ভারটি তার 404 ফেরত দেবে:
header('Redirect abbb.404.nonexist');<যা নিশ্চিতভাবে বিদ্যমান নেই


7
যদি আপনি এটি করেন তবে এটি একটি 302ও ফেরত আসবে। আপনার 404 এর পুনঃনির্দেশ না করা ভাল। পরিবর্তে 404 স্থিতি কোড ব্যবহার করুন এবং পাওয়া বার্তা প্রদর্শন করুন।
রকি 7

-17

আপনি যদি সার্ভারের ডিফল্ট 404 পৃষ্ঠা দেখাতে চান তবে আপনি এটিকে ফ্রেমে লোড করতে পারেন:

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

4
আমি এই সাইটে দেখেছি সবচেয়ে খারাপ উত্তর জন্য এটি এক ধরণের ব্যাজ পেতে হবে।
ম্যাডটুরকি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.