Baba: mod_rewrite

Beitrag lesen

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