3

Ich möchte ein benutzerdefiniertes 404-Fehlerdokument festlegen, aber ich habe ein Problem damit!Apache "Datei nicht gefunden." anstelle von 404. Fehlerdokument

Zuerst habe ich zwei RewriteRules in meinem .htaccess:

RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3.php?lang=$1 [L] 
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3/$4.php?lang=$1 [L] 

Also meine URL wie folgt aussieht:/de-de/page/other/stuff und opend /page/other/stuff.php?lang = de-de

Jetzt ist es Zeit, meine eigenen Fehler Dokument zu setzen: Errordocument 404 /404.php

Wenn es einen Fehler in "/ de-de/page/other /" zum Beispiel "ist/de-de/false/Seite/"Ich habe das Fehlerdokument erfolgreich bekommen. Aber wenn es einen Fehler im Namen der PHP-Datei gibt (zum Beispiel "falsches Zeug" anstelle von "Zeug"), bekomme ich nur die Meldung "Datei nicht gefunden". aber nicht mein Fehlerdokument.

Was ist los? Was kann ich tun, um es zu beheben?

Danke für Ihre Hilfe!

AuthType Basic 
AuthName "Password Protected Area" 
AuthUserFile /var/www/vhosts/<domain>/development/tests/demo.<domain>/.htpasswd 
Require valid-user 

<IfModule mod_rewrite.c> 
    RewriteEngine on   
    RewriteCond %{HTTPS} !=on 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,QSA] 
</IfModule> 



RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3.php?lang=$1 [L] 
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/?$ /$2/$3/$4.php?lang=$1 [L] 

ErrorDocument 404 /404.php 

Apache Error Log:

[404] GET /de-de/support/support/fdfssdf HTTP/1.0 
AH01071: Got error 'Primary script unknown\n' 

Antwort

0

Verwenden RewriteCond überprüfen, ob die PHP-Datei vorhanden ist:

RewriteCond %{REQUEST_URI} ^/([^/.]+)/([^/.]+)/([^/.]+)/?$ 
RewriteCond %{DOCUMENT_ROOT}/%2/%3.php -f 
RewriteRule^/%2/%3.php?lang=%1 [L] 

RewriteCond %{REQUEST_URI} ^/([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/?$ 
RewriteCond %{DOCUMENT_ROOT}/%2/%3/%4.php -f 
RewriteRule^/%2/%3/%4.php?lang=%1 [L]