ฉันจะข้ามการจัดการ 404 ของ wordpress และเปลี่ยนเส้นทางข้อผิดพลาด 404 ทั้งหมดสำหรับไฟล์สแตติกไปที่ 404.html ได้อย่างไร


17

ฉันจะข้ามการจัดการ 404 ของ wordpress และเปลี่ยนเส้นทางข้อผิดพลาด 404 ทั้งหมดสำหรับไฟล์สแตติกไปที่ 404.html ได้อย่างไร

ฉันอ่านและดูเหมือนว่ามันเป็นไปไม่ได้เมื่อใช้ Permalinks?

วัตถุประสงค์คือเพื่อลดการโหลดเซิร์ฟเวอร์สำหรับข้อผิดพลาด 404 โดยไม่โหลด php

คำตอบ:


8

.htaccess ข้ามข้อผิดพลาด 404 WordPress จัดการไฟล์แบบคงที่

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !(robots\.txt|sitemap\.xml(\.gz)?)
        RewriteCond %{REQUEST_FILENAME} \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ [NC]
        RewriteRule .* - [L]
    </IfModule>

หมายเหตุ:กฎเหล่านี้ถูกสร้างขึ้นโดยปลั๊กอินแคชรวมของ W3 *

Nginx ข้ามการจัดการ WordPress 404 สำหรับไฟล์คงที่

if (-f $request_filename) {
    break;
}
if (-d $request_filename) {
    break;
}
if ($request_uri ~ "(robots\.txt|sitemap\.xml(\.gz)?)") {
    break;
}
if ($request_uri ~* \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$) {
    return 404;
}

1

เพื่อขยายสิ่งที่ Chris_O พูด .... ฉันจะติดตั้ง W3 Total Cache และใช้การตั้งค่าจากปลั๊กอินนั้นเพื่อไม่แคชไฟล์คงที่ ปลั๊กอินในตัวมันมีประโยชน์มากและจะต้องทำให้ไซต์ของคุณเร็วขึ้นโดยเฉพาะการอัปเดตล่าสุด

นอกจากนี้ฉันขอแนะนำให้คุณดูที่การสร้างข้อผิดพลาด 404 หน้าจาก Wordpress เพื่อดูวิธีจัดการกับ 404 สำหรับไฟล์คงที่, 403 (ต้องห้าม), ฯลฯ มันอ่านดี


1

อาจเป็นทางออกที่ง่าย ใช้แท็กเงื่อนไขis_404()และสร้างการเปลี่ยนเส้นทางไปยังไฟล์สแตติกของคุณ รวมรหัสในไฟล์header.phpหรือindex.phpของธีม

นี่เป็นตัวอย่าง

   if ( is_404() ) {
      wp_redirect( 'static.htm' );
      exit;
   }

การเชื่อมโยง


2
การตัดสินใจยังทำใน PHP ที่นี่และไม่อยู่ในระดับ htaccess จุดมุ่งหมายคือการข้ามการโหลด PHP ทั้งหมดสำหรับข้อผิดพลาด 404
นักคิดอิสระ

2
@freethinker: ถูกต้องผ่าน php เท่านั้น วิธีผ่าน htaccess นั้นเร็วขึ้น แต่อาจไม่ง่ายนักในการจัดการ WordPress
เริ่ม

@kaiser อุ๊ปส์อัปเดตคำถาม
freethinker

0

ฉันไม่แน่ใจว่าเป็นไปได้ หากคุณดูรหัส htaccess ที่ WordPress สร้างขึ้นเมื่อคุณเปิดใช้งาน permalinks โดยทั่วไปแล้วจะบอกว่า: "หากไม่พบไฟล์ / ไดเรกทอรีให้ส่งไปที่ index.php" รวมคำขอ 404 จริงทั้งหมด นอกเหนือจากการสร้างรายการของทรัพยากรสาธารณะที่สร้างขึ้นแบบไดนามิกที่ WordPress รู้จักและแทรกสิ่งนี้ลงใน. htaccess โดยตรงคุณจะต้องโหลด php เพื่อจัดการกับ 404 ของ


0

ฉันชอบความคิดของChris_Oแต่ฉันสร้างเวอร์ชันของฉันเองซึ่งปลอดภัยกว่า

ดังนั้นสิ่งที่ฉันทำฉันเพิ่งเพิ่มโฟลเดอร์ไปที่ข้อยกเว้นดังนั้นหากคำขอของคุณเริ่มต้นจากบรรทัดเหล่านั้น - ไม่ใช่ลิงก์ที่ถูกต้องแน่นอน คำขอส่วนใหญ่มาจากบ็อตที่พยายามตรวจสอบเนื้อหาของโฟลเดอร์เหล่านั้นเพื่อหาช่องโหว่ พวกเขาจะถูกกรองอย่างมีประสิทธิภาพและหากจำเป็นคุณสามารถแสดงหน้า 404 แบบคงที่เล็ก ๆ

คำขออื่น ๆ จะยังคงได้รับการจัดการโดย wordpress และหากมีคนป้อนที่อยู่ผิดจะแสดงข้อความที่ไม่เป็นมิตรต่อผู้ใช้ในแม่แบบของคุณ วิธีการแก้ปัญหาของChris_Oจะใช้งานได้เฉพาะกับคำขอที่มีลักษณะเหมือนนามสกุลไฟล์มิฉะนั้นจะถูกจัดการด้วย wordpress

เพื่อให้มีความน่าเชื่อถือยิ่งขึ้นคุณสามารถดึงไฟล์การเข้าถึงข้อมูลดิบและค้นหาข้อผิดพลาด 404 หากคุณสังเกตเห็นคำขอจำนวนมากที่ขึ้นต้นด้วยบรรทัดเฉพาะคุณสามารถรวมคำขอเหล่านั้นไว้ในตัวกรองนี้ได้:

#adding your own handler
ErrorDocument 404 /404/index.html

<IfModule mod_rewrite.c>
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(404|cgi-bin|wp-admin|wp-content|wp-includes)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

0

ฉันติดตั้ง CMS หลายรายการในเว็บไซต์ของฉันดังนั้นฉันใช้สิ่งนี้เพื่อใช้หน้าข้อผิดพลาด 404 เดียวกันสำหรับ CMS ทั้งหมด ฉันใช้ conf นี้สำหรับ Nginx + FastCgi และมันใช้ได้ดี:

server {
    ...
    error_page 404 /404.html; #enable custom 404 error page
    location ~ /\.ht {
        deny all; #disable access to htaccess
    }
    location ~ [^/]\.php(/|$) {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on; #disable PHP 404 error intercept
    }
    location /wordpress/ {
        try_files $uri $uri/ /wordpress/index.php?$args;
    }
}

ฉันใช้การตั้งค่านี้ร่วมกับสิ่งนี้ใน php.ini:

cgi.fix_pathinfo = 1 

WordPress มีการติดตั้งเช่นนี้http://example.com/wordpress/ 404.html ตั้งอยู่ในรากของhttp://example.com/

PS อย่าลืมว่าต้องเริ่มบริการ PHP และ Nginx ใหม่หลังจากทำการเปลี่ยนแปลงไฟล์ php.ini หรือ nginx.conf เพื่อให้การเปลี่ยนแปลงมีผล


-3

การทำเช่นนี้มี 3 วิธี

  1. โดยการเปลี่ยนรหัส 404.php ของคุณ
  2. โดยใช้ปลั๊กอิน WordPress
  3. โดยแก้ไขไฟล์. htaccess ของคุณ

จบบทช่วยสอน - (ลิงก์ตายและเปลี่ยนเส้นทางไปยังจดหมายขยะ)


สวัสดี Mazhar คุณช่วยโพสต์คำตอบแบบเต็มได้มากกว่าแค่ลิงก์ไปยังเว็บไซต์ของคุณ หากลิงก์นั้นตายคำตอบนี้จะไร้ประโยชน์มาก! ไชโย!
สตีเฟ่นแฮร์ริส

หน้านี้ให้ 404. แดกดัน หรือคุณกำลังพยายามพูดอะไรบางอย่าง?
Michiel van der Blonk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.