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
Finanztipp:
Leihen Sie sich Geld von einem Pessimisten.
Er rechnet sowieso nicht damit, dass er es zurückbekommt.