पुनर्निर्देशित पृष्ठ 404 तक सीमित है


21

क्या 404 पृष्ठ दिखाने का एक तरीका है यदि उपयोगकर्ता में वर्तमान लॉग इन पेज को देखने के लिए सही मंजूरी नहीं है? मैं एक PHP विधि की तलाश में हूँ, कुछ इस तरह

if( !current_user_can('administrator') ) { show_404(); exit(); }

मैंने पुनर्निर्देशन का उपयोग करने के बारे में सोचा है, लेकिन मैं url को समान रखना चाहूंगा।


यदि आप किसी ऐसे उपयोगकर्ता के लिए उपयोग करने से इनकार कर रहे हैं जो मौजूद है, तो 404 उपयोग करने के लिए गलत त्रुटि कोड है। एक 401 या 403 अधिक समझ में आता है।
मोपेट

1
तुम सही हो। मैं ग्राहक से इस धारणा के तहत था कि वह किसी को भी एक्सेस के बिना नहीं जानता था, यहां तक ​​कि पेज मौजूद नहीं था, एक 401 फेंकने पर यह कहेगा कि यह मौजूद है लेकिन निषिद्ध है। बहरहाल, इसके बजाय 401 फेंकना एक आसान बदलाव होगा।
इवान युंग

जवाबों:


52

मैं अपने हेडर में निम्न कोड का उपयोग करके 404 त्रुटि प्रदर्शित करने में सक्षम था।

<?php
  global $wp_query;
  $wp_query->set_404();
  status_header( 404 );
  get_template_part( 404 ); exit();
?>

इसे तोड़ने के लिए::
$wp_query->set_404()wp_query को बताता है कि यह 404 है, यह शीर्षक बदलता है
status_header(): HTTP 404 हेडर भेजता है
get_template_part(): 404 टेम्प्लेट प्रदर्शित करता है


यह एक अच्छा उत्तर है, लेकिन मैं यह http_status_code(404);सुनिश्चित करने के लिए टेम्पलेट का उपयोग करने से पहले भी उपयोग करूंगा कि हेडर सही है (जो वर्डप्रेस status_header( 404 );फ़ंक्शन की तुलना में काफी तेज है )। यदि आप पृष्ठ रैंक से संबंधित हैं, तो आपको Disallowयह इंगित करने के लिए अपने robots.txt में एक नियम रखना चाहिए कि यह एक सार्वजनिक संसाधन नहीं है।
mopsyd

2

आप ऐसा पृष्ठ क्यों नहीं बनाते जो त्रुटि संदेश दिखाता है और फिर उस पृष्ठ पर उपयोगकर्ता को पुनर्निर्देशित करता है? इसे प्राप्त करने का एक सरल तरीका यहां दिया गया है:

404.phpफ़ाइल खोलें और इसके ऊपर इन पंक्तियों को जोड़ें:

/**
 * Template Name: 404 Page
 */

404 Pageटेम्पलेट के साथ एक पेज बनाएँ । फिर उपयोगकर्ताओं को पुनर्निर्देशित करें:

if ( !current_user_can('administrator') ) {
    $404_page = get_permalink( $404_page_id );
    wp_redirect( $404_page );
    exit();
}

404 अनुरोध के लिए आपको एक पृष्ठ का उपयोग करना चाहिए कारण है: WP 404 पृष्ठ वास्तव में एक ऐसा पृष्ठ है जो मौजूद नहीं है , 404 पृष्ठ पर लौटने से पहले WP को अपनी सभी सामग्री की खोज करनी होगी और यह काम संसाधन की बर्बादी है। पूर्व-कॉन्फ़िगर किए गए पृष्ठ का उपयोग करना जो आपके ब्लॉग को तेज़ी से चलाने में मदद कर सकता है।


मैंने इसका उपयोग करने के बारे में सोचा है। लेकिन एक दंपत्ति जो मुझे दिखाई देता है वह यह है कि दो 404 टेम्प्लेट बनाने और बनाए रखने होंगे (पृष्ठ और वास्तविक)। क्लाइंट को 404 पेज बनाना होगा। और मैं URL को समान रखना चाहूंगा। उदाहरण के लिए, यदि मैं example.com/restricted पर जाता हूं, तो मुझे अनुप्रेषित नहीं किया जाएगा ... / 404 /
Evan Yeung

वास्तव में मुझे सिर्फ एहसास हुआ कि 404.php टेम्पलेट है। मेरी गलती।
Evan Yeung

नहीं, यह एक बहुत ही भयानक विचार है यदि आप किसी भी प्रकार की पेज रैंकिंग करना पसंद करते हैं। खोज इंजन केवल उन पृष्ठों पर विचार करते हैं जो एक 404 या किसी 4xx रेंज हेडर को दर्शक त्रुटि के रूप में लौटाते हैं, और खुशी से 200 पेज का रिटर्न देने वाले किसी भी चीज़ को अनुक्रमणित करेंगे। यदि आप रीडायरेक्ट करते हैं, तो आप क्रॉलर्स को बता रहे हैं कि आपका पाया गया पेज वैध पृष्ठ नहीं है, और यह आपके पेज की रैंकिंग को बुरी तरह से गड़बड़ कर देगा। जब आप 404 पेज करते हैं, तो आपको वास्तव में करने की आवश्यकता होती है http_response_code(404); exit();। यदि आप एक पृष्ठ चाहते हैं, तो get_template_part( 404 );बाहर निकलने से पहले उपयोग करें। यह भी किसी भी वर्डप्रेस कार्यक्षमता की तुलना में बहुत तेज है।
mopsyd

0

आप 404.php फाइल करने के लिए इस कोड को वास्तव में उपयोग की जाने वाली थीम डायरेक्टरी (wp-content / themes /..../ 404.pp) में लिख सकते हैं :

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>

यह कोड फ़ाइल की शुरुआत (बिना किसी वर्ण से पहले) से शुरू होना चाहिए ।

मूल से लिंक: वर्डप्रेस में अपने 404 पेज को होम पेज पर कैसे रीडायरेक्ट करें


ओपी वास्तव में उपयोगकर्ताओं के लिए 404 को प्रदर्शित करने का एक तरीका है जो एक निश्चित मानदंड को पूरा नहीं करता है, जैसे "यदि उपयोगकर्ता A में 'can_edit' क्षमता नहीं है, तो 404 पृष्ठ प्रदर्शित करें।"
फतस्क

404s पुनर्निर्देशित न करें। Location: xxx301 हेडर सेट करता है, जो क्रॉलर्स को बताता है कि वास्तव में एक वैध संसाधन है, और आपकी रैंकिंग को मारता है जब वे निर्धारित करते हैं कि वहाँ नहीं है।
mopsyd

0

मेरी भी ऐसी ही आवश्यकता थी, जहाँ मुझे उपयोगकर्ताओं को लेखक की पहुँच की अनुमति नहीं देनी चाहिए। एक उपयोगकर्ता जिस भूमिका में था, उसके आधार पर मैंने पृष्ठ देखा। मैं अपनी जाँच करने के लिए template_redirect क्रिया पंजीकृत करता हूँ और वास्तविक पृष्ठ लोड होने से पहले ही 404 पृष्ठ पर पुनर्निर्देशित कर देता हूँ।

पंजीकरण:

add_action( 'template_redirect', [ $this, 'handle_inactive_users']);

हैंडलर:

public function handle_inactive_users() {
    global $wp_query;
    if ( $wp_query->is_author() ) {
        $user = $wp_query->get_queried_object();
        if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
            $wp_query->set_404();
            status_header( 404 );
            get_template_part( 404 );
            exit();
        }
    }
}

यदि आपने टेम्प्लेट भाग के मध्य में केवल निम्न कोड स्निपेट का उपयोग करना चुना है, तो हो सकता है कि पृष्ठ पहले से ही आंशिक रूप से प्रस्तुत किया गया हो और आपको वास्तव में 404 पृष्ठ पर पुनर्निर्देशित नहीं किया गया हो। template_redirectकार्रवाई में ऐसा करने के लिए बेहतर है -

$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.