Redirect und Rewrite
webrewriter
- webhosting
0 Der Martin0 DZVO
Hallo!
In meiner bestehenden .htaccess maskiere ich PHP-Dateien wie folgt:
RewriteRule (.*)_p([0-9]+).html$ /show_product.php?products_id=$2
Frage: Wie kann ich diese RewriteRule erweitern, das ein in der URL fehlendes "www" ergänzt wird?
Z.B. soll "http://testdomain.de/test_p1.html" zu "http://www.testdomain.de/test_p1.html" und "http://testdomain.com/test_p1.html" zu http://www.testdomain.com/test_p1.html umgeleitet werden, aber auch gleichzeitig "intern" die ursprüngliche RewriteRule greifen, die diese Anfrage an die PHP-Datei weiterleitet.
Mein bisheriger Versuch:
===========
RewriteCond %{HTTP_HOST} !^www..* [NC]
RewriteCond %{HTTP_HOST} !^.*..*..* [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]
RewriteRule (.*)_p([0-9]+).html$ /show_product.php?products_id=$2
===========
Ergebnis: "www"-Problem wird gelöst. Aber in der Browser-Adresszeile wird aus "http://testdomain.de/test_p1.html" nun leider "http://www.testdomain.de/show_product.php?products_id=1"
Wie erreiche ich, dass trotz des Redirects die Maskierung "http://www.testdomain.de/test_p1.html" stehen bleibt.
Danke für Eure Hilfe!
Tschüss,
Holger
Hi,
In meiner bestehenden .htaccess maskiere ich PHP-Dateien wie folgt:
RewriteRule (.*)_p([0-9]+).html$ /show_product.php?products_id=$2
du hast URLs, bei denen die Zeichen vor _p völlig egal sind? Cool ...
Z.B. soll "http://testdomain.de/test_p1.html" zu "http://www.testdomain.de/test_p1.html" und "http://testdomain.com/test_p1.html" zu http://www.testdomain.com/test_p1.html umgeleitet werden, aber auch gleichzeitig "intern" die ursprüngliche RewriteRule greifen, die diese Anfrage an die PHP-Datei weiterleitet.
Erstens: Bitte verwende nicht einfach erfundene Domainnamen, die wirklich existieren könnten. Für anonyme Beispiele gibt es extra reservierte Namen.
Zweitens: Mit dem Denkansatz "gleichzeitig" bringst du dich hier in Schwierigkeiten. Du hast zwei Baustellen:
1. example.org/* nach www.example.org/*
2. /*_p0000.html nach /show_product.php?products_id=0000
Die erste Umsetzung ergibt eine Änderung des Hostnamens, das ist nur mit einem Redirect möglich. Nur so erreichst du außerdem, dass die geänderte URL auch in der Browser-Adresszeile erscheint. Ein Redirect heißt aber automatisch: Ein zweiter, aus HTTP-Sicht unabhängiger Request.
Die zweite Umsetzung möchtest du serverintern und "heimlich" machen.
Damit ist klar: Du brauchst zwei Rewrite-Rules, die voneinander unabhängig sind. Betrachte die beiden Requests, die da nacheinander kommen, tatsächlich als getrennt.
Warum du unbedingt auf den www-Hostnamen umleiten willst, ist mir allerdings schleierhaft.
Mein bisheriger Versuch:
RewriteCond %{HTTP_HOST} !^www..* [NC]
RewriteCond %{HTTP_HOST} !^.*..*..* [NC]RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]
RewriteRule (.*)_p([0-9]+).html$ /show_product.php?products_id=$2
Wenn du nach dem R-Flag auch noch ein L setzt, könnte es so laufen, wie du dir das vorstellst - allerdings geben mir deine beiden RewriteConds Rätsel auf. Was zum Geier machst du da?
Ciao,
Martin
1. Redirect bei fehlenden www
====== htaccess code =======
RewriteCond %{HTTP_HOST} !^www.meineDomain.de$
RewriteRule ^(.*)$ http://www.meineDomain.de/$1 [L,R=301]
====== htaccess code =======
2. saubere RewriteRule der Documente
====== htaccess code =======
RewriteRule ^(.*)_p([0-9]+).html$ /show_product.php?products_id=$2 [L]
====== htaccess code =======
3. die neue htaccess-Datei sieht dann z.B. wie folgt aus
====== htaccess code =======
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} !^www.meineDomain.de$
RewriteRule ^(.*)$ http://www.meineDomain.de/$1 [L,R=301]
RewriteRule ^(.*)_p([0-9]+).html$ /show_product.php?products_id=$2 [L]
====== htaccess code =======
4. Erklärung :)
[L] = steht für "last" und bedeutet das nach ausführen dieser Rule keine weiteren Prüfungen stattfinden sollen
[R=301] steht für eien 301 redirect die ist nur interessant für Sumas :)
MFG
Maik