2016-03-19 7 views
2

Guter Abend Lieben Programmierer,.htaccess RedirectMatch bedingter regex nicht

Ich versuche URLs ohne Dateierweiterungen zu behandeln, die besser lesbar durchschnittlichen Internet-Nutzer mit einer .htaccess Umleitung sind, wie http://example.com/file-http://example.com/file.php (mit oder ohne query)

Leider bin ich nicht in der Lage mod_rewrite zu verwenden, aber obwohl Umleitung funktioniert, scheint es nicht in der Lage zu sein, meine Anfrage richtig zu handhaben.

beliebige URL behandeln ich

RedirectMatch ^/(?(?=.*\.php(?i).*)|(\w+)(.*)) /$1.php$2 

Und

RedirectMatch ^/.*\.php(?i).*|(\w+)(.*) /$1.php$2 

Neben der Verwendung $2 und $3, vorausgesetzt, das Verhalten versuchte mit vielleicht den ersten Muster im Gegensatz zu jedem Wissen extrahieren.

Es sollte Zeichen und Zahlen für $1 und alles andere für $2 (für Anfragen usw. mit ? Start) extrahieren, wenn es die .php Dateierweiterung enthält.

Validieren die Regex mit https://regex101.com/r/zF2bV9/2 alles sollte gut funktionieren, aber eine dieser Linien an den .htaccess Umsetzung der Dateiname wird jede beliebige Datei mit „.php“ ersetzen (wie in http://example.com/.php) und offensichtlich einen Fehler eines nicht vorhandenen produzieren Datei.

Was fehlt mir an dem Code oder der Redirect-Funktionalität?

+0

„und alles andere für $ 2 (beginnend mit für Abfragen usw.?)“ - nur, beachten 'RedirectMatch' Spiele gegen den URL-Pfad nur. Sie können die Abfragezeichenfolge nicht zuordnen. Aber Sie brauchen es auch nicht, da es unverändert zum Ziel weitergegeben wird. – MrWhite

+0

@ w3dk, wenn es einmal richtig mit 'RedirectMatch ^/(\ w +) (. *)/$ 1.php $ 2' in einer anderen Serverkonfiguration funktioniert hat, aber jetzt wird dies zu einer Endlosschleife führen. bekomme ich dich richtig, dass $ 2 überhaupt nicht notwendig ist? Leider kann ich es nicht testen, solange das erste Problem auftritt. – getriebesand

+0

Die bestimmten URLs könnten dies beeinflussen, aber nicht die "Serverkonfiguration". Diese Direktive würde immer zu einer Endlosschleife für eine URL wie '/ file' führen. Ja, $ 2 ist unnötig. – MrWhite

Antwort

0

können Sie versuchen, so etwas wie:

RedirectMatch ^/([^.]+)$ /$1.php 

Dies entspricht der URL vorausgesetzt, es nicht bereits ein Punkt ist (dh .php.) In der URL. Und so verhindert eine Umleitungsschleife.

Wie in den Kommentaren erwähnt, brauchen Sie nicht etwas Bestimmtes mit dem Abfrage-String zu tun, vorausgesetzt, Sie wollen, dass es unverändert an das Ziel durchlaufen. Die Abfragezeichenfolge ist in dem URL-Pfad nicht vorhanden, auf den die RedirectMatch-Direktive trotzdem passt. Also, jede Manipulation der Abfrage Zeichenfolge würde benötigen mod_rewrite.

+0

Leider funktioniert das auch nicht für mich. Ich erhalte einen Fehler 404 mit meiner benutzerdefinierten Fehlermeldung. Aber die Adresszeile bleibt wie getippt, was ich verwirrend finde. Vielleicht bekomme ich das ganze Redirect-Ding falsch? Danke für das Abfragethema obwohl! – getriebesand

+0

Wenn die "Adresszeile wie eingegeben" bleibt, dann macht die obige 'RedirectMatch' (mod_alias) Direktive nichts. Um welche URL bitten Sie? Haben Sie andere Anweisungen in '.htaccess'?Haben Sie andere '.htaccess' Dateien? Vermutlich geht diese Direktive in eine '.htaccess' Datei im Dokumentenstamm? Vermutlich sind diese "URLs ohne Dateierweiterungen" nur eine Abkürzung für Ihre Benutzer? Ihre Anwendung verwendet immer noch die vollständigen URLs für die Erweiterung? – MrWhite