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.

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top