Zur Navigation

Url Ohne Parameter = Redirect, mit Parameter kein Redirect [2]

11 Jörg Kruse

Gibt es noch weitere RewriteRules in der .htaccess Datei des Hauptverzeichnisses oder in der .htaccess Datei des Unterverzeichnis dir?

11.02.2015 17:01 | geändert: 11.02.2015 17:02

... 3 Jahre und 5 Monate später ...

12 d3rdav3

Hallo,

habe ein ähnliches anliegen, vielleicht könntet ihr mir helfen, ich würde gern das meine Seiten über einen Link

https://example.de/kontakt

aufrufen und intern soll dies auf

https://example.de/index.php?ft=kontakt

gleichzeitig sollte der 2. link aber im besten Fall auch aufrufbar sein. Meine .htaccess sieht derzeit so aus.

vielen Dank schon einmal :)


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index\.php?ft=$%{REQUEST_URI}? [R,L]
</IfModule>

19.07.2018 15:32

13 Jörg Kruse

Da fehlt denke ich noch das Muster, auf welches die Regel anspringen soll:

RewriteRule ^ ^index\.php?ft=%{REQUEST_URI} [L]

Und das R-Flag würde ich rausnehmen, die URL soll ja nicht weitergeleitet, sondern nur serverintern umgeschrieben werden

Edit: das Dollar-Zeichen ist m.E. auch überflüssig

19.07.2018 16:25 | geändert: 19.07.2018 16:28

14 d3rdav3

Hallo Jörg,

vielen Dank, leider klappt das ganze noch nicht wirklich, dass R hatte ich zum debuggen noch drin. Bekomme jetzt leider immer einen File not Found zurück. Die angesprochenen Dateien existieren und sind über den ?ft= link auch ansprechbar.

habe die Zeile um ein ^ gekürzt, da kam ich irgendwie ganz komisch raus.

RewriteRule ^index\.php?ft=%{REQUEST_URI} [L]

viele Grüße
David

20.07.2018 08:23

15 Jörg Kruse

Bekomme jetzt leider immer einen File not Found zurück.

Wird auch der Pfad des nicht gefundenen Files angegeben? daraus lassen sich ggf. Rückschlüsse ziehen

%{REQUEST_URI} hat möglicherweise auch noch einen Slash vorne dran. Von daher würde ich es stattdessen so probieren:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)$ index\.php?ft=$1 [L]

$1 nimmt (.+) wieder auf und enthält entsprechend den Pfad ohne beginnenden Slash

habe die Zeile um ein ^ gekürzt, da kam ich irgendwie ganz komisch raus.

Ja, weil dann der Zielpfad als Muster und die Flags als Zielpfad interpretiert werden. Nach dem Schlüsselbegriff RewriteRule muss als erstes ein Pattern (Muster) angegeben werden, auf welches die Regel angewendet werden soll. "^" passt auf alle URLs, alternativ ginge z.B. auch ".+"

Edit: im Zielpfad war auch noch ein ^ zu viel - das habe ich entfernt!

Edit 2: dann hattest du das "^" also schon drin, nur fehlte das Leerzeichen zur Trennung vom Zielpfad

Korrekt wäre so gewesen:

RewriteRule ^ index\.php?ft=%{REQUEST_URI} [L]

20.07.2018 09:09 | geändert: 20.07.2018 09:22

16 d3rdav3

Vielen vielen Dank, klappt wunderbar, habe noch die Parameter mit angehangen, falls ich etwas übergeben möchte. So sieht nun die fertige .htaccess Datei aus.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)$ index\.php?ft=$1&%{QUERY_STRING} [L]
</IfModule>


Nochmals vielen Dank und vielleicht hilft es ja auch anderen die etwas ähnliches benötigen.

viele Grüße
David

23.07.2018 11:45

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]