Zur Navigation

301 weiterleitung nach veränderung der url-struktur

1 Hauke

hallo jörg, ist es möglich mit einer 301 weiterleitung von:

http://forum.joergkrusesweb.de/keyword.html
http://forum.joergkrusesweb.de/keyword+keyword.html

auf

http://forum.joergkrusesweb.de/feststehend/keyword
http://forum.joergkrusesweb.de/feststehend/keyword-keyword

umzuleiten und wenn ja, wie?

danke vielmals

lg

16.03.2009 11:33

2 Jörg

Ich würde es so probieren:

RewriteEngine on
RewriteBase /
RewriteRule ^([^\+]*)\.html$ http://forum.joergkrusesweb.de/feststehend/$1 [R=301]

RewriteRule ^([^\+]*)\+([^\+]*)\.html$ http://forum.joergkrusesweb.de/feststehend/$1-$2 [R=301]

RewriteRule ^([^\+]*)\+([^\+]*)\+([^\+]*)\.html$
http://forum.joergkrusesweb.de/feststehend/$1-$2-$3 [R=301]

# ... und so weiter ...

16.03.2009 13:07 | geändert: 16.03.2009 13:09

3 Hauke

Hallo :) Das ergibt leider einen 500 Internal Server Error.

So sieht meine htaccess nun aus:

RewriteCond %{QUERY_STRING} PHPSESSID
RewriteRule ^(.*)$ $1? [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.domain\.de$
RewriteRule ^(.*)$ http://www.domain.de/$1 [L,R=301]

RewriteRule ^anmelden.?$ register.php [L]
RewriteRule ^passwort.?$ newpw.php [L]

RewriteRule ^feststehend/(.*)/(.*)$ search.php?q=$1&page=$2 [L]
RewriteRule ^feststehend/(.*)$ search.php?q=$1 [L]
RewriteRule ^feststehend.?$ search.php [L]

RewriteRule ^hit/(.*)$ hit.php?page=$1 [L]
RewriteRule ^hit.?$ hit.php [L]

RewriteRule ^seiten/(.*)$ index.php?page=$1 [L]

RewriteRule ^user/(.*)-[^/]*/(.*)$ user.php?userid=$1&page=$2 [L]
RewriteRule ^user/(.*)-[^/]*$ user.php?userid=$1 [L]

RewriteRule ^melden/(.*)$ melden.php?bmid=$1 [L]

RewriteRule ^([^\+]*)\.html$ http://www.domain.de/feststehend/$1 [R=301]

RewriteRule ^([^\+]*)\+([^\+]*)\.html$ http://www.domain/feststehend/$1-$2 [R=301]

RewriteRule ^([^\+]*)\+([^\+]*)\+([^\+]*)\.html$
http://www.domain.de/feststehend/$1-$2-$3 [R=301]

ErrorDocument 404 http://www.domain.de

beisst sich da vielleicht was?

lg

16.03.2009 13:46 | geändert: 16.03.2009 13:46

4 Jörg

Was hast du im Rootverzeichnis für eine Indexdatei liegen? Du leitest bei einer 404 auf die Startseite weiter - besser wäre das Anzeigen einer eigenen Fehlerseite bei Beibehaltung der URL. Möglicherweise wird durch die 404 + Weiterleitung eine Endlosschleife ausgelöst.

/index.html -> /feststehend/index -> /index.html -> ...

Du kannst versuchen, die Schleife mit einer geeigneten RewriteCond zu verhindern

RewriteCond %{REQUEST_URI} !index\.html
RewriteRule ^([^\+]*)\.html http://www.domain.de/feststehend/$1

16.03.2009 14:43

5 Hauke

im rootverzeichnis liegt eine index.php

ps. einzeln funktioniert es:

Redirect permanent /keyword+test.html http://www.domain.de/feststehend/keyword-test

lg

16.03.2009 17:46

6 Jörg

im rootverzeichnis liegt eine index.php

Ja, es könnte aber vielleicht noch sein, dass der Apache vor der Überprüfung, ob die index.html existiert, die RewriteRule anwendet. Hast du mal getestet, ob die RewriteCond in Beitrag 4 eine Schleife verhindert?

16.03.2009 18:28 | geändert: 16.03.2009 18:28

7 Hauke

ja, habe ich aber leider ohne erfolg.

16.03.2009 20:12

8 Jörg

Ich habe deine .htaccess nochmal bei mir getestet.

Ohne die Zeile
RewriteCond %{REQUEST_URI} !index\.html
gibt es eine Endlosschleife - auch wenn keine index.html existent ist. Mit der Zeile gibt es bei mir kein Problem.

Ich würde noch den Browser-Cache leeren, insbesondere Firefox lädt gerne auch nach erfolgten Änderungen weiter die Weiterleitungen aus dem Cache.

Falls dies das Problem nicht behebt: hast du Zugriff auf den Error-Log des Webservers? dort sollte der Grund für den 500er verzeichnet sein.

16.03.2009 20:40 | geändert: 16.03.2009 20:40

9 Hauke

Zitat von Jörg
Falls dies das Problem nicht behebt: hast du Zugriff auf den Error-Log des Webservers? dort sollte der Grund für den 500er verzeichnet sein.

[Thu Mar 19 19:24:56 2009] [alert] [client 217.235.xxx.xxx] /var/www/domain/domain/.htaccess: RewriteRule: bad argument line '^([^\\+]*)\\+([^\\+]*)\\+([^\\+]*)\\.html$', referer: http://www.domain.de/
lg

19.03.2009 19:34 | geändert: 19.03.2009 19:35

10 Jörg

Der Fehler liegt hier und ist nur schwer erkennbar:

RewriteRule ^([^\+]*)\+([^\+]*)\+([^\+]*)\.html$
http://www.domain.de/feststehend/$1-$2-$3 [R=301]

Das sind zwei Zeilen - das ganze gehört aber in eine Zeile (durch ein Leerzeichen getrennt):

RewriteRule ^([^\+]*)\+([^\+]*)\+([^\+]*)\.html$ http://www.domain.de/feststehend/$1-$2-$3 [R=301]

19.03.2009 20:08