Mod_rewrite kann einen ja ganz schön in Bedrängnis bringen. Ich denke der Hauptgrund ist, dass man nicht genau sehen oder verfolgen kann, was da eigentlich passiert. Die Regeln werden ja mehrmals durchlaufen und man sieht nicht, wie oft, mit welchen Werten für die Referenzen, etc. Ich habe keinen Zugriff auf die logs :(
However, beschäftige mich nun seit 2 Tagen damit intensiv und finde mich langsam zurecht.
Folgende Fragen habe ich nun noch, die ich nicht klären kann.
Q1:
In welche Dokumentation soll ich schauen. Es gibt 2.0, 2.2, 2.4. Bei mir steht in %{API_VERSION} "20051115:3". In $_SERVER["SERVER_SOFTWARE"] steht leider nur "Apache", ohne Version.
Ich möchte folgende Umleitung:
www.example.com -> route.example.com/www.php
Das klappt schon fast. Hier eine Auswahl meiner Regeln (.htaccess):
# remove trailing slash and reload
RewriteRule (.*[^/])/$ /$1 [R=301,L]
# redirect <subdomain>.example.com to route.example.com/<subdomain>.php
RewriteCond %{IS_SUBREQ} !=true
RewriteCond %{HTTP_HOST} [^route].*.example.de$ [NC]
RewriteCond %{HTTP_HOST} ^(.*).example.com$ [NC]
RewriteRule (/?.*) http://route.example.com/%1.php$1 [P]
Macht aus
www.example.com
http://route.exmaple.com/www.php
und aus
www.example.com/page
http://route.exmaple.com/www.phppage
Q2:
Wie kann ich erreichen, dass in der Referenz der letzten RewriteRule $1 auch der Slash gespeichert wird? Leider kann ich nicht schreiben
RewriteRule (.*) http://route.example.com/%1.php/$1 [P]
denn wenn der Request www.example.com ist, habe ich am Ende der URI einen Slash. Dann springt bei mir aber wieder die erste Regel an, die das ganze per R=301 neu lädt. Endet damit, dass im Browser steht http://route.example.com/www.php
Q3:
Ich möchte diese Regel "intern" anwenden. Heisst: im Browser soll stehen www.example.com/page. Daher verwende ich Flag P. Mache ich das richtig?
Unendlich dankbar für den befreienden Tipp,
Baba