Wie Errordocument verwenden, um eine PHP-Datei im selben Ordner zu umleiten?
-
13-09-2019 - |
Frage
Ich mag Anfragen nehmen für fehlende Dateien in einem bestimmten Ordner und leiten sie auf program.php in diesem Ordner.
Dies ist ein Programm, das ich eine Menge an verschiedenen Orten verwenden, und ich möchte den Namen des Ordners in der .htaccess-Datei zu vermeiden, bevorzugt angeben.
Ich habe versucht, nur setzen:
errordocument 404 program.php
, aber das Ergebnis ist, dass der Browser nur ausdruckt "program.php" und führt nicht program.php.
Ich verstehe Warum dies geschieht: auf der Grundlage der Dokumentation unter http://httpd.apache.org/docs/2.0/mod/core.html , URLs, die mit einem Schrägstrich oder http nicht als eine Textnachricht interpretiert beginnen.
Die Frage ist, wie um diese Einschränkung zu bekommen, um die Lage sein, die gleichen Ordner zugreifen zu können.
Lösung
ich am Ende mit RewriteRule statt Errordocument :
rewriteengine on rewritecond %{request_filename} !-f rewriterule ^(.+).jpg$ program.php?i=$1.jpg [L]
Die zweite Zeile stellt sicher, dass die Datei nicht existiert, so dass vorhandene Bilder korrekt angezeigt werden.
Andere Tipps
Sie mögen:
ErrorDocument 404 /program.php
Nach dem docs „URLs beginnen mit einem Schrägstrich (/) für lokale Web-Pfade (relativ zur DocumentRoot). "
Haben Sie versucht, einen (relativ oder absolut) Weg? Wenn Sie es relativ zu machen, sollte es auf die Web-Root sein, die möglicherweise Server Ihren Zweck.
ErrorDocument 404 /program.php
Wenn Sie nur eine kleine Anzahl von Ordnern haben, können Sie wahrscheinlich verwenden:
<Directory /path/a>
ErrorDocument 404 /a/program.php
</Directory>
<Directory /path/b>
ErrorDocument 404 /b/program.php
</Directory>
<Directory /path/c>
ErrorDocument 404 /c/program.php
</Directory>
Wenn dies praktisch nicht möglich ist, dann sollten Sie nur eine program.php in der Wurzel haben und haben es anders reagieren, je nach Inhalt der REDIRECT_URL Umgebungsvariable, der $ _SERVER [ ‚REDIRECT_URL‘] in PHP ist.
Warum nicht ein Errordocument alle Fehler behandeln in allen Ordnern? Könnte auf diese Weise viel sauberer sein. Sie könnten den Einzelfall mit $ _SERVER dann handeln [ „REQUEST_URI“], die die ursprüngliche Anforderung enthalten sollen, wenn ich mich richtig erinnere.
Wie wäre es diese. In Ihrem Root-Pfad, setzen Sie eine generische error.php Datei auf. Doch alle es tut, ist die REQUEST_URI zu analysieren, den Pfad überprüfen, ob es eine benutzerdefinierte error.php ist, und umfassen das. Könnte arbeiten, nicht wahr?