it-swarm.com.de

Kann man Sonderzeichen mit mod_alias und `Redirect`-Direktive abgleichen?

Ich verwende Apache 2.4.6 mit mod_alias und habe eine Website, die Datenverkehr von einem Link auf einer anderen Website erhält, über die ich keine Kontrolle habe. Der Link der anderen Site ist schlecht aufgebaut und führt dazu, dass Besucher, die von einer externen Site auf meine Site gelangen, sofort den Fehler 400 erhalten. Die URL endet aus irgendeinem Grund mit einem wörtlichen % -Zeichen: domain.com/news/october_news.pdf%

(Randnotiz: Es genügt zu sagen, dass die ursprüngliche Website nicht kontaktiert werden kann und die URL aus unbekannten Gründen nicht geändert wird.)

Meine Website verwendet in hohem Maße die Anweisungen mod_alias und Redirect. Ich hatte daher die Hoffnung, die Konsistenz aufrechtzuerhalten und dieselbe Anweisung zum Nutzen zukünftiger Webmaster zu verwenden. Nach dem Lesen der Dokumentation scheint es möglich, aber ich konnte es nicht zum Laufen bringen. Ich versuche, jeden, der zur URL domain.com/news/october_news.pdf% wechselt, zu domain.com/news/october_news.pdf umzuleiten. Grundsätzlich muss ich das Prozentzeichen abhacken. Wie würde ich das mit mod_alias und Redirect machen? Oder vielleicht ist es einfach nicht möglich und ich muss RedirectMatch verwenden.

Derzeit habe ich in einer .htaccess -Datei Folgendes versucht:

redirect “/news/october_news.pdf%” “/news/october_news.pdf”
redirect “/news/october_news.pdf%25” “/news/october_news.pdf”
redirect “/news/october_news.pdf\%” “/news/october_news.pdf”

Alle haben den Fehler 400 Bad Request, den Apache an den Browser zurückgibt, nicht geändert.

3
Wesley

Sie können kein mod_alias Redirect (oder sogar mod_rewrite RewriteRule - verwenden, das vor mod_alias ausführt), um eine 400 "schlechte Anfrage" zu fangen. Dies gilt sowohl für Anweisungen in .htaccess als auch in der Serverkonfiguration. Die "schlechte Anfrage" wird einfach viel früher in der Anfrage ausgelöst.

Tatsächlich können Sie in .htaccess nichts tun, um die schlechte Anfrage abzufangen. .htaccess wird nie bearbeitet - es ist zu spät.

Wie @Stephen in Kommentaren vorschlug, können Sie jedoch ein benutzerdefiniertes 400-Fehlerdokument in der Serverkonfiguration definieren und solche Anforderungen mithilfe Ihres serverseitigen Skripts (z. B. PHP) untersuchen, um anschließend eine übergeordnete Umleitung auszulösen. Aber dieses Fehlerdokument muss in einem Server oder Virtualhost Kontext definiert sein; .htaccess (oder <Directory> Container) ist zu spät. Zum Beispiel direkt in Ihrem <VirtualHost> Container:

ErrorDocument 400 /errordocs/e400.php

Im Falle von PHP können Sie dann die angeforderte URL (die den nachfolgenden % enthält) unter Verwendung der REDIRECT_URLoder REQUEST_URI-) Indizes des $_SERVER-Superglobals untersuchen und ausgeben die entsprechende Weiterleitung.

Stellen Sie sicher, dass Ihre Standardantwort 400 eine angemessene/benutzerfreundliche Nachricht mit entsprechenden Links zurückgibt. Andernfalls erhalten Sie wahrscheinlich eine Browser-Standardantwort.


redirect “/news/october_news.pdf%” “/news/october_news.pdf”

--- (Beiseite: Sie sollten keine geschweiften Anführungszeichen .. verwenden, um die Argumente zu umgeben - die Anfrage wird niemals übereinstimmen (auch aus diesem Grund). Wenn Sie die Argumente umgeben müssen/möchten, müssen Sie gerade Anführungszeichen verwenden, d. H. ".

Dies ist auch eine 302 (temporäre) Weiterleitung (vielleicht haben Sie dies nur zum Testen gemacht?). Dies sollte letztendlich eine 301 (permanente) Weiterleitung sein.

1
MrWhite