WordPress'in 404 kullanımını nasıl atlayabilir ve statik dosyalar için 404 hatalarının tümünü 404.html'ye nasıl yeniden yönlendirebilirim?


17

WordPress'in 404 kullanımını nasıl atlayabilir ve statik dosyalar için 404 hatalarının tümünü 404.html'ye nasıl yeniden yönlendirebilirim?

Okudum ve kalıcı bağlantılar kullanırken bu mümkün değil gibi görünüyor?

Amaç php yüklemeyerek 404 hata için sunucu yükünü azaltmaktır.

Yanıtlar:


8

.htaccess statik dosyalar için WordPress 404 hata işleme atla .

<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>

Not: Bu kurallar W3 Total Cache eklentisi tarafından oluşturulmuştur *

Nginx, statik dosyalar için WordPress 404 işlemeyi atlar.

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 söylediklerini genişletmek için .... W3 Toplam Önbellek yüklemek ve statik dosyaları önbelleğe değil bu eklenti ayarlarını kullanın. Eklentinin kendisi çok faydalıdır ve özellikle en son güncellemeyle sitenizi hızlandırmak için bir zorunluluktur.

Ayrıca , statik dosyalar, 403 (yasak), vb. İçin 404'ün nasıl işleneceğini görmek için Wordpress'ten Hata 404 Sayfası Oluşturma'ya göz atmanızı öneririm .


1

Belki basit bir çözüm. Koşullu etiketi kullanın ve is_404()statik dosyanıza bir yönlendirme oluşturun; kodu dosyaya header.phpveya index.phptemanın içine ekleyin .

İşte bir örnek.

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

Bağlantılar


2
karar verme hala PHP'de yapılır ve htaccess düzeyinde değildir. Amaç 404 hata için PHP yüklemesini tamamen atlamaktır.
freethinker

2
@ freethinker: doğru, sadece php ile; htaccess ile yol daha hızlı, ancak WordPress'te o kadar kolay değil
bueltge

@kaiser ayy, soru updated
freethinker

0

Bunun mümkün olduğundan emin değilim. Kalıcı bağlantıları etkinleştirdiğinizde WordPress'in oluşturduğu htaccess koduna bakarsanız, temelde şöyle der: "Dosya / dizin bulunamazsa, index.php dosyasına gönderin." Bu, tüm gerçek 404 istekleri içerir. WordPress'in bildiği her dinamik olarak oluşturulan genel kaynağın bir listesini oluşturmanın ve bunu doğrudan .htaccess'e eklemenin dışında, 404'leri işlemek için php yüklemeniz gerekir.


0

Chris_O fikrini beğendim , ama kendi versiyonumu yaptım, bu daha güvenli.

Yaptığım şey, sadece istisna için klasörler ekledim, bu yüzden istekleriniz bu satırlardan başlıyorsa - kesinlikle geçerli bir kalıcı bağlantı değil. İsteklerin çoğu, bu klasörlerin içeriğini istismarlara karşı kontrol etmeye çalışan botlardan geliyor. Etkili bir şekilde filtrelenecekler ve gerekirse küçük bir statik 404 sayfası görüntüleyebilirsiniz.

Diğer istekler yine de wordpress tarafından işlenecek ve birisi yanlış bir adres girerse, şablonunuzda kullanıcı dostu bulunmayan bir mesaj gösterecektir. Chris_O'nun çözümü yalnızca dosya uzantılarına benzeyen istekler için çalışacaktır, aksi takdirde wordpress tarafından da ele alınacaktır.

Daha da güvenilir hale getirmek için, ham erişim dosyanızı alabilir ve 404 hataları arayabilirsiniz. Belirli satırlarla başlayan birçok istek görürseniz, bunları bu filtreye de dahil edebilirsiniz:

#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

Sitemde birden fazla CMS yüklü var, bu yüzden tüm CMS'ler için aynı 404 hata sayfasını kullanmak için böyle bir şey kullanıyorum. Bu conf Nginx + FastCgi için kullanın ve iyi çalışıyor:

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

Ben php.ini içinde bu yapılandırma ile birlikte kullanın:

cgi.fix_pathinfo = 1 

wordpress şu şekilde kurulur http://example.com/wordpress/ . 404.html http://example.com/ kökünde bulunur .

Not: php.ini veya nginx.conf dosyalarında değişikliklerin yürürlüğe girmesi için PHP ve Nginx hizmetlerinin yeniden başlatılması gerektiğini unutmayın.


-3

Bunu yapmanın 3 yolu vardır

  1. 404.php kodunuzu değiştirerek.
  2. Wordpress eklentilerini kullanarak.
  3. .Htaccess dosyanızı düzenleyerek.

Tam öğretici - (bağlantı ölü ve spam'e yönlendirildi)


Merhaba Mazhar, sitenize bağlantı vermek yerine tam bir yanıt gönderebilir misiniz? Bu bağlantı koparsa, bu cevap hemen hemen işe yaramaz! Şerefe!
Stephen Harris

bu sayfa bir 404 verir. İronik. Yoksa bir şey mi söylemeye çalışıyorsun?
Michiel van der Blonk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.