Zur Navigation

htaccess - GET-Variable rewriten

1 dlsn

Hallo zusammen!

Ich versuche schon ziemlich lange, meine .htaccess so zu schreiben, damit sie Folgendes tut:

Sie soll meinedomain.de/?post=hund
zu meinedomain.de/hund/ umschreiben.

Allerdings habe ich das auch nach einiger Recherche und Versuchen nicht hingekriegt.

Das ist meine .htacces (ohne meine Versuche das obige Ziel umzusetzen):
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Redirect 301 /index /

Weiß jemand, wie ich das oben Beschriebene hinbekomme?

Viele Grüße,
Daniel

P.S. das Entfernen der Endung .php funktioniert im Skript oben.

02.03.2022 13:32 | geändert: 02.03.2022 13:45

2 Jörg Kruse

Wenn ich dich richtig verstehe, soll bei Aufruf von https://example.com/foo/ der Inhalt von https://example.com/index.php?post=foo angezeigt werden, ohne dass weitergeleitet wird?

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

Diese RewriteRule sollte vor der anderen RewriteRule stehen.

02.03.2022 13:47 | geändert: 02.03.2022 13:49

3 dlsn

Das funktioniert leider nicht.

Es zeigt den Fehler:
Not Found
The requested URL was not found on this server.

Apache/2.4 Server at example.de Port 443

02.03.2022 13:52

4 Jörg Kruse

Eine index.php gibt es aber - oder heißt die Index-Datei anders?

Möglicherweise funkt diese Redirect-Direktive noch dazwischen:

Redirect 301 /index /

Ich würde hier stattdessen auch mit mod_rewrite weiterleiten:

RewriteRule ^index$ / [R=301]

... und nach jeder Änderung den Browser-Cache leeren

02.03.2022 14:07

5 dlsn

Ja, die Index-Datei heißt index.php.

Ich habe auch die genannte Redirect-Direktive nun mit mod_rewrite ersetzt.

Aber leider bleibt der Fehler bestehen (den Browser-Cache habe ich gerade vor dem Test aber geleert.

02.03.2022 14:37

6 Jörg Kruse

Kannst du nochmal den gesamten, aktuellen Inhalt der .htaccess Datei posten?

02.03.2022 14:53

7 dlsn

RewriteEngine On

RewriteBase /

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

02.03.2022 15:05

8 Jörg Kruse

Die RewriteConds gehören zur jeweils folgenden RewritRule:

RewriteEngine On

RewriteBase /

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteRule ^index$ / [R=301]

Existiert https://example.com/foo/ als reales Verzeichnis?

02.03.2022 15:27

9 dlsn

Zitat von Jörg
Die RewriteConds gehören zur jeweils folgenden RewritRule
--> hab ich so abgeändert.

Zitat von Jörg
Existiert https://example.com/foo/ als reales Verzeichnis?
--> nein. Sollte es das geben?

02.03.2022 15:31

10 dlsn

Ich habe jetzt mal eine leere Datei mit dem Dateinamen foo.php angelegt.
Dann wird der Inhalt von index.php?post=foo angezeigt.
Nun ist es aber so, dass ich von meiner Datenbank aber verschiedene Datensätze mit verschiedenen Namen bei "foo" ausgeben möchte. Das würde bedeuten, dass ich für jeden Namen eine Datei erstellen müsste, was natürlich nicht geht.
Lässt sich das umgehen?


Habe gemerkt, dass es doch nicht funktioniert ;-)

02.03.2022 16:33 | geändert: 02.03.2022 16:39