Zur Navigation

redirect mit RedirectMatch

1 Andy (Gast)

Hallo lieber Jörg und Community :-)

auf der Suche nach einer Lösung meines Problems bin ich auf das Forum hier gekommen, aber bin leider auch nicht ganz fündig geworden :(

Zu meinem Problem:

Mein Bekannter ist von joomla auf Wordpress umgestiegen (vor längerer Zeit) und möchte nun seine Unterseiten per redirect umleiten. Die Quelle ist eigentlich recht simpel und sieht in etwa so aus:

http://meine-seite.de/unterverzeichnis1.html 

auf

http://meine-seite.de/unterverzeichnis1/

Mit folgendem Befehl funktioniert es auch super.

RedirectMatch permanent (.*)\.html$ http://meine-seite.de/$1

Das Problem ist, das auch die Startseite umgeleitet wird von:

http://meine-seite.de/

auf

https://meine-seite.de//index/

Die Frage ist nun: Ist es möglich die Startseite aus der Weiterleitung raus zu lassen? Also quasi als Ausnahme?

Habe schon einiges probiert, was hier im Forum geschrieben wurde, aber nichts hat funktioniert :( zum Beispiel:

RewriteCond %{REQUEST_URI} !^/(index)?$ [NC]
RewriteCond %{REQUEST_URI} !^/(index\.html)?$ [NC]
RewriteCond %{REQUEST_URI} !/?$

Vieleicht hast du ja Rat für mich :-)

Lieben Gruß
Andy

27.06.2017 13:50

2 Jörg Kruse

RedirectMatch und RewriteCond gehören zwei verschiedenen Modulen an, nämlich mod_alias und mod_rewrite und lassen sich von daher nicht kombinieren. Du kannst ja eine reine mod_rewrite Lösung implementieren, also so in etwa:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/?index\.html$
RewriteRule ^/?(.+)\.html$ http://meine-seite.de/$1/ [R=301,L]

27.06.2017 15:23

3 Andy (Gast)

Super vielen Dank.

Jetzt klappt das mit der Startseite, aber nicht mehr mit den Unterverzeichnissen.

Also wenn ich jetzt auf

http://meine-seite.de/unterverzeichnis1.html 

gehe, werde ich weitergeleitet auf die Startseite. Das Ziel sollte aber

http://meine-seite.de/unterverzeichnis1/

sein. Also ohne .html endung

27.06.2017 17:41

4 Jörg Kruse

Wenn du noch weiteren mod_rewrite Code verwendest, z.B. den von Wordpress, dann muss dieser unterhalb des Weiterleitungs-Codes stehen, also unterhalb der RewriteEngine-Direktive

Falls die Änderung der Reihenfolge (und ein Leeren des Browser-Caches) keine Besserung bringt, poste mal den gesamten Code der .htaccess Datei

27.06.2017 17:54

5 Andy (Gast)

Okay. Habe eben probiert den unteren Teil auch vor dem WordPress-Teil zu schreiben, was aber auch nicht funktioniert hat. Auch nicht nach dem leeren des Caches

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/?index\.html$
RewriteRule (.+)\.html$ http://meine-seite.de/$1

27.06.2017 17:59

6 Jörg Kruse

Die Flags R=301 und L fehlen; vor allem L, welches dafür sorgt, dass bei Zutreffen keine weitere Rule ausgeführt wird. Probier mal so:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !^/?index\.html$
RewriteRule ^/?(.+)\.html$ http://meine-seite.de/$1/ [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

27.06.2017 18:07

7 Andy (Gast)

Jörg... du bist der Beste :-) Es funktioniert :-D.

Ich habe noch in anderen Foren nach Hilfe angefragt, aber keiner konnte mir wirklich weiterhelfen. Und in deinem Forum und deinem Wissen, ist das quasi ein "klacks". Super!

Ich danke dir vielmals für deine Hilfe.

Darf ich dich noch fragen, wieso du das in den Wordpress-Teil eingefügt hast? Spiel das eine entscheidende Rolle?

27.06.2017 18:15

8 Jörg Kruse

Die RewriteEngine und RewriteBase Direktiven braucht es nur einmal und der Übersicht halber würde ich diese immer voranstellen. Im Grunde genommen besteht der eigentliche WordPress-Code nur aus diesen Zeilen:

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

27.06.2017 18:33

9 Andy (Gast)

Klasse. Vielen lieben Dank nochmals :-)

27.06.2017 19:29