Seite 1 von 1

.htaccess-Problem - ist diese Lösung sinnvoll?

Verfasst: 28.07.2006, 18:36
von rike1
Hallo an alle,

zur Information: Ich habe sowohl vBSEO 2.4.0 als auch den Hack 'Google Sitemap Generator 1.5' bei meinem vBulletin 3.5.4 im Einsatz.

Ziel: Alle Aufrufe von https://abcdefghijk.de sollen permanent (301) weitergeleitet werden auf https://www.abcdefghijk.de.

Problem: bei Eingabe von https://abcdefghijk.de wird korrekt umgeleitet auf www.abcdefghijk.de. Wenn ich jedoch https://abcdefghijk.de/forum/ eingebe, funktioniert diese Weiterleitung nicht.

Anmerkung: Ich arbeite dabei sowohl mit einer .htaccess-Datei im Root als auch mit einer weiteren .htaccess-Datei im Forum-Root.

Ich habe in meinem Root-Verzeichnis https://www.abcdefghijk.de eine .htaccess-Datei mit folgendem Inhalt:

Code: Alles auswählen

# Comment the following line (add '#' at the beginning)
# to disable mod_rewrite functions.
# Please note: you still need to disable the hack in
# the vBSEO control panel to stop url rewrites.
RewriteEngine on

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

RewriteCond %{REQUEST_FILENAME} !forum/
RewriteCond %{QUERY_STRING} !vbseourl=
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ forum/vbseo.php?vbseourl=$1&vbseorelpath=../&%{QUERY_STRING} [L]
 
RewriteCond %{REQUEST_FILENAME} !forum/
RewriteRule ^(.*.php)$ forum/vbseo.php?vbseourl=$1&vbseorelpath=../&%{QUERY_STRING} [L]
Zudem habe ich eine weitere .htaccess-Datei im Forum-Root
https://www.abcdefghijk.de/forum/ mit folgendem Inhalt abgelegt:

Code: Alles auswählen

# Comment the following line (add '#' at the beginning)
# to disable mod_rewrite functions.
# Please note: you still need to disable the hack in
# the vBSEO control panel to stop url rewrites.
RewriteEngine On

# Some servers require the Rewritebase directive to be
# enabled (remove '#' at the beginning to activate)
# Please note: when enabled, you must include the path
# to your root vB folder (i.e. RewriteBase /forums)
#RewriteBase /
RewriteRule ^(sitemap.*.(xml|txt)(.gz)?)$ vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} (admincp|modcp|clientscript|cpstyles|images)/
RewriteRule ^(.*)$ $1 [L]

RewriteCond %{QUERY_STRING} !vbseourl=
RewriteCond %{REQUEST_FILENAME} !chat
RewriteRule ^(.*.php)$ vbseo.php?vbseourl=$1&%{QUERY_STRING} [L]

RewriteRule ^(archive/.*)$ vbseo.php?vbseourl=$1&%{QUERY_STRING} [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ vbseo.php?vbseourl=$1&%{QUERY_STRING} [L]
Wie gesagt, bei Eingabe von https://abcdefghijk.de wird korrekt umgeleitet auf www.abcdefghijk.de. Wenn ich jedoch https://abcdefghijk.de/forum/ eingebe, funktioniert diese Weiterleitung nicht.

Nun habe ich folgende Ergänzung in der .htaccess-Datei im Forum-Root vorgenommen:

Code: Alles auswählen

# Comment the following line (add '#' at the beginning)
# to disable mod_rewrite functions.
# Please note: you still need to disable the hack in
# the vBSEO control panel to stop url rewrites.
RewriteEngine On

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

# Some servers require the Rewritebase directive to be
# enabled (remove '#' at the beginning to activate)
# Please note: when enabled, you must include the path
# to your root vB folder (i.e. RewriteBase /forums)
#RewriteBase /
RewriteRule ^(sitemap.*.(xml|txt)(.gz)?)$ vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} (admincp|modcp|clientscript|cpstyles|images)/
RewriteRule ^(.*)$ $1 [L]

RewriteCond %{QUERY_STRING} !vbseourl=
RewriteCond %{REQUEST_FILENAME} !chat
RewriteRule ^(.*.php)$ vbseo.php?vbseourl=$1&%{QUERY_STRING} [L]

RewriteRule ^(archive/.*)$ vbseo.php?vbseourl=$1&%{QUERY_STRING} [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ vbseo.php?vbseourl=$1&%{QUERY_STRING} [L]
Nach dieser Ergänzung (Code-Zeilen 6 + 7) scheint das Problem gelöst.

Da ich jedoch nur rudimentäre Ahnung von mod_rewrite habe, möchte ich sicherstellen, dass dies so in Ordnung ist.

Kann mir jemand von Euch sagen, ob das soweit in Ordung ist?

Vielen Dank,
Grüße
rike

Verfasst:
von

Verfasst: 28.07.2006, 23:32
von Caterham
ist diese Lösung sinnvoll?
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} (admincp|modcp|clientscript|cpstyles|images)/
RewriteRule ^(.*)$ $1 [L]
Nein. Nutze in diesem Teil

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (admincp|modcp|clientscript|cpstyles|images)/ - [L] 
Der Pattern der rule wird zuerst geprüft, das Minus steht für "no substitution".

Punkte im Pattern (linker teil) müssen escaped werden, wenn sie auch als Punkt zählen sollen. Um den alten QueryString anzuhängen gibt es das QSA-Flag. Ich persönlich würde immer URL-paths statt filepaths in der substitution (rechts) notieren, aber das ist eine Ansichtssache. Es spart die URL-path Bastelschritte, was entweder über RewriteBase oder durch hinzufügen des prefix und Abtrennen des DocumentRoots erfolgt. Im Ergebnis braucht mod_rewrite im per-dir context einen URL-path.

Code: Alles auswählen

RewriteEngine On
# wenn das nur ein normaler plain-Ausdruck ist, nutze den Vergleichsoperator statt einer (langsameren) RegEx:
RewriteCond %{HTTP_HOST} !=www.abcdefghijk.de
RewriteRule ^(.*)$ http://www.abcdefghijk.de/forum/$1 [L,R=301]

# Some servers require the Rewritebase directive to be
# enabled (remove '#' at the beginning to activate)
# Please note: when enabled, you must include the path
# to your root vB folder (i.e. RewriteBase /forums)
#RewriteBase /
RewriteRule ^(sitemap.*\.(xml|txt)(\.gz)?)$ /vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule  (admincp|modcp|clientscript|cpstyles|images)/  - [L]

RewriteCond %{QUERY_STRING} !vbseourl=
RewriteCond %{REQUEST_URI} !chat
RewriteRule ^(.*\.php)$ /vbseo.php?vbseourl=$1 [L,QSA]

RewriteRule ^(archive/.*)$ /vbseo.php?vbseourl=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /vbseo.php?vbseourl=$1 [L,QSA]
Grüße
Robert

Verfasst: 08.08.2006, 12:25
von rike1
Hallo Robert,

vielen Dank für Deine Antwort! Ich habe mittlerweile Deine Ratschläge umgesetzt und alles funktioniert, Deine Tipps waren sehr hilfreich!

Nochmals vielen Dank!

rike