Mod_rewrite ile Apache dahili 404 sayfaya yönlendirme?

4 Cevap php

Aktif mod_rewrite kullanarak URL'lerin bir dizi için Apache default, built-in 404 page hizmet etmek için bir yolu var mı? Bir özel hata belge, ancak böyle bir kural

RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule -- serve 404 page -----

Ben 404 başlığını gönderen bir PHP sayfası oluşturmak için bilmek ve mod_rewrite Orada tüm URL'ler yönlendirmek ama ben mod_rewrite sadece dayanan bir çözümü tercih ederim.

Ben sadece bir varolmayan adrese yönlendirme fikri vardı:

RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule .* /sflkadsölfkasdfölkasdflökasdf

ama bu kullanıcıya biraz profesyonelce görünüyor "/sflkadsölfkasdfölkasdflökasdf does not exist" hata sayfasında mesajı verecek.

4 Cevap

Bunu yapmak için en iyi yolu, durum kodu 404 ile R bayrağını ayarlamak için:

RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule ^ - [L,R=404]

Ama bu Apache 2 beri kullanılabilir.

Bu çalışması gerekir:

RewriteEngine on
RewriteRule ^/page.html /error404.html [L]

Gerçi 404 başlık vermeyecektir. Sen [L,R=404] için bayrak için chaning deneyebilirsiniz ama ben bu işe şüpheliyim (bu yönlendirmeler için olması gerekiyordu sadece).

PHP bunu yaparken senin fikrin çalışacak. Tüm "hata sayfaları" sayfaları sunucu tarafı (yani PHP) iseniz o zaman sadece bu kodu kullanabilirsiniz:

<?php
header( 'HTTP/1.0 404 Not Found' );
include 'error404.html';

Ben onaylayın

RewriteRule ^ - [L,R=404]

veya

RewriteRule ^ - [L,redirect=404]

won't wveyak. Here is the explanation from the official Apache website:

However, if a status code is outside the redirect range (300-399) then the substitution string is dropped entirely, and rewriting is stopped as if the L were used.

Yani en iyi çözüm, daha sonra açıklandığı gibi 404 başlığı ile bir 404.php dosyaya yönlendirmek.