কীভাবে আমি পিএইচপি-তে 404 ত্রুটি তৈরি করতে পারি?


111

আমার .htaccess এ সমস্ত অনুরোধ পুনর্নির্দেশ /word_hereকরে /page.php?name=word_here। পিএইচপি স্ক্রিপ্ট তারপরে অনুরোধ করা পৃষ্ঠাটি তার পৃষ্ঠাগুলির অ্যারেটিতে রয়েছে কিনা তা পরীক্ষা করে।

যদি তা না হয় তবে আমি কীভাবে একটি ত্রুটি 404 অনুকরণ করতে পারি? আমি এই চেষ্টা করেছি, কিন্তু এটা আমার 404 পৃষ্ঠার মাধ্যমে কনফিগার করার ফল করা হয়নি ErrorDocumentমধ্যে .htaccessদেখানো।

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

আমি কি এই ভেবে সঠিক আছি যে আমার ত্রুটি 404 পৃষ্ঠাতে পুনর্নির্দেশ করা ভুল?


আপনি কেন এটি কাজ করে না মানে? আপনি সার্ভার প্রতিক্রিয়া শিরোনাম চেক করেছেন?
গম্বো

1
আপনার সমাপ্তি প্রশ্নের উত্তরে হ্যাঁ, সমস্ত 404 গুলি একটি সত্যিকারের পৃষ্ঠায় পুনর্নির্দেশ করা খারাপ ধারণা হবে। এটি এমন কোনও কিছুকে এমন কিছু রূপান্তর করে যা এইচটিটিপি অনুমানকে লঙ্ঘন করে।
লুকাস ওমান

উত্তর:


156

404 পৃষ্ঠা উত্পন্ন করার জন্য আপ-টু-ডেট উত্তর (পিএইচপি 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 কোড পাবেন। এটি যা করবে না তা হ'ল "পাওয়া যায় নি" পৃষ্ঠাটি প্রত্যাশা করা হতে পারে, উদাহরণস্বরূপ:

খুঁজে পাওয়া যায়নি

অনুরোধ করা ইউআরএল / সর্বশেষ.এফপি এই সার্ভারে পাওয়া যায় নি।

কারণ পিএইচপি যখন 404 কোড ফেরত দেয় তখন ওয়েব সার্ভার সেই পৃষ্ঠাটি প্রেরণ করে না (অন্তত অ্যাপাচি দেয় না)। পিএইচপি তার নিজস্ব আউটপুট প্রেরণের জন্য দায়ী। সুতরাং আপনি যদি অনুরূপ পৃষ্ঠা চান তবে আপনাকে এইচটিএমএল নিজেই পাঠাতে হবে, যেমন:

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

আপনি এই পোস্টিকে httpd.conf এ রেখে নিজের 404 বার্তাগুলির জন্য একই পৃষ্ঠাটি ব্যবহার করতে অ্যাপাচি কনফিগার করতে পারেন:

ErrorDocument 404 /notFound.php

ধন্যবাদ। আমি ধরে নিলাম এটি আমার 404 পৃষ্ঠাটি ব্যবহার করেছে।
এরিক 20

@JW যেখানে উপরের কোডটি ব্যবহার করা হবে? '.htaccess' ফাইলের জন্য সেই কোড।
মনোহর কুমার

আপনি যেখানে ৪০৪ পৃষ্ঠা প্রেরণ করতে চান সেখানে মানোহারকুমার উপরে কোড ব্যবহার করুন। আমার ক্ষেত্রে, আমি ব্যবহার করেছি যখন কেউ তার কোড সহ কোনও আইটেম সন্ধান করে তবে এটি বিদ্যমান নেই। সুতরাং আমি এই আইটেমটি উপলভ্য নয় তা খুঁজে পাওয়ার পরে উপরের কোডটি ব্যবহার করি এবং আমি 404 পৃষ্ঠার পরে লোড এড়াতে এই কোডের তৃতীয় লাইনে খুব প্রস্থান করতাম used আপনাকে জেডাব্লু ধন্যবাদ, এটা আমার জন্য pefectly কাজ করে।
হর্ষ

22

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

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

3
ভাল একটি 404 এইচটিটিপি 1.0 এবং 1.1 উভয়ই 404। 1.0 একটি নিরাপদ বাজি। দুর্দান্ত কৌতুক বিটিডাব্লু :) +1
এটেস গোলাল

আমার ক্ষেত্রে আমাকে হেডার দিতে হবে ("অবস্থান: HTTP / 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

ড্রুপাল বা ওয়ার্ডপ্রেস সিএমএসে (এবং সম্ভবত অন্যরা) আপনি যদি কিছু কাস্টম পিএইচপি কোডটি উপস্থিত না হওয়ার জন্য প্রদর্শিত হয় (কিছু শর্ত পূরণ না করা হয়), নিম্নলিখিতটি সিএমএসের 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, কিন্তু পিএইচপি থেকে।
এরিক

আপনি যদি ত্রুটি ডকুমেন্ট ব্যবহার করতে চান তা নিশ্চিত করুন যে আপনার কাস্টম ত্রুটি ফাইলটির পথটি সার্ভারের মূলের সাথে সম্পর্কিত উদাহরণ হিসাবে: আপনার ভার্চুয়াল পাথটি / ফোল্ডার 1 / ফোল্ডার 2 / মাইহট্যাক্সেসটি সার্ভারের মূল থেকে বলুন যে আপনার ত্রুটিযুক্ত দৃষ্টিকোণটি এর মতো কিছু দেখবে will ত্রুটি ডকুমেন্ট 404 / ফোল্ডার 1
folder2/

ErrorDocumentআপনি ইতিমধ্যে পিএইচপি কোড প্রবেশ করার পরে কোনও প্রভাব ফেলবে না। এই উত্তরটি 9 বছর আগে
এরিক

আমি আশা করি আপনার সমস্যার এতক্ষণে সমাধান হয়ে গেছে। কোনও অফ সাবজেক্টে, আমার মনে হয় আপনি নাম = শব্দ_এখানে পুনর্নির্দেশ না করাই ভাল। পরিবর্তে, $reqpath = strtok("/".trim(substr($_SERVER["REQUEST_URI"], strlen(APP_ROOT)), "/"), "?");আপনার page.php ফাইলটিতে ব্যবহার করুন। কোজ এমন একটি দৃশ্য আছে যেখানে pages পৃষ্ঠাগুলির মধ্যে একটিতে ব্যবহারকারীর কাছ থেকে একটি "নাম" ক্যোয়ারী আশা করা হচ্ছে।
ব্যবহারকারী5891645

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