Claudius L.: RewriteRule funktioniert nicht mehr nach Kopieren

Hallo!

Seit gestern abend wurstle ich nun schon an diesem Problem herum – und weiß noch nichtmal so wirklich, wo es denn eigentlich liegt. Ich versuche darum erstmal, die Situation möglichst genau zu beschreiben.

Zunächst mal: Es geht um zwei VirtualHosts:
 - schule.test (DocumentRoot: F:\Webdesign\Schule)
 - webdesign.test (DocumentRoot: F:\Webdesign)

Unter schule.test/wwww (also F:\Webdesign\Schule\wwww) befindet sich ein kleines CMS. Das URL-Management wird über eine .htaccess-Datei in Ordner F:\Webdesign\Schule geregelt und funktioniert ohne Probleme. Die RewriteRule, die das meiste regelt, sieht wie folgt aus:

RewriteRule ^wwww/(foo|bar)((/.*$)|($)) wwww/index.php?$1$2

Klappt bis hierher auch, kein Problem.
Jetzt wollte ich aber ein paar Experimente mit dem CMS anstellen und habe dazu alles nach F:\Webdesign\TestCMS kopiert (aufzurufen also über webdesign.test/TestCMS).
Die index.php liegt also im Unterordner TestCMS, die .htaccess liegt um die Architektur möglichst gleich dem Original zu erhalten direkt in F:\Webdesign.
So wie ich das sehe sollte es doch eigentlich genügen, wenn ich in der RewriteRule das wwww durch TestCMS ersetze.
Das Problem dabei ist: offensichtlich genügt das nicht. Rufe ich webdesign.test/TestCMS/foo auf, so bekomme ich nur 404 zurück.

Wie schon erwähnt habe ich an diesem Problem schon nach bestem Wissen und Gewissen herumgemurkst, aber da meiner Ansicht nach eigentlich alles stimmen müsste, weiß ich leider nicht so genau, wo ich eigentlich ansetzen soll.
Könnte mir da vielleicht jemand ein wenig auf die Sprünge helfen? Würde mich freuen …! ;-)

Grüße,

Claudius

  1. Unter schule.test/wwww (also F:\Webdesign\Schule\wwww) befindet sich ein kleines CMS. Das URL-Management wird über eine .htaccess-Datei in Ordner F:\Webdesign\Schule geregelt und funktioniert ohne Probleme. Die RewriteRule, die das meiste regelt, sieht wie folgt aus:

    RewriteRule ^wwww/(foo|bar)((/.*$)|($)) wwww/index.php?$1$2

    So viele Klammern...
     RewriteRule ^wwww/(foo|bar)(/.*$|$) wwww/index.php?$1$2 [L]
    müsste das gleiche sein.

    Wenn das dein Livesystem ist (und du nicht damit umziehen musst, wo kein Zugriff auf die httpd.conf besteht), würde ich die Regeln im <virtualhost> plazieren statt im Verzeichniskontext.

    Dort aber
    RewriteRule ^/wwww/(foo|bar)(/.*$|$) /wwww/index.php?$1$2 [PT]

    Jetzt wollte ich aber ein paar Experimente mit dem CMS anstellen und habe dazu alles nach F:\Webdesign\TestCMS kopiert (aufzurufen also über webdesign.test/TestCMS).

    Welche Apache-Version nutzt du? Unter Apache 1.3 bestehen api-bedingt unter Win32-Systemen die filenames grds. in Kleinbuchstaben. Ansonsten schaue mal per RewriteLog nach, was passiert. Der Verzeichniskontext kann kompliziert werden, drum würde ich bei Zugriff auf die httpd.conf grds. den Serverkontext vorziehen. In dem Fall wäre das im <virtualhost> von webdesign.test dann

    RewriteRule ^/TestCMS/(foo|bar)(/.*$|$) /TestCMS/index.php?$1$2 [PT]

    1. Hallo Bob und danke für deine Denkanstöße!

      RewriteRule ^wwww/(foo|bar)((/.*$)|($)) wwww/index.php?$1$2

      So viele Klammern...
      RewriteRule ^wwww/(foo|bar)(/.*$|$) wwww/index.php?$1$2 [L]
      müsste das gleiche sein.

      Ah, cool dass das so auch geht. Ich war mir nicht sicher und hatte vorsichtshalber lieber ein paar Klammern mehr als zu wenig gesetzt … ;-)

      Wenn das dein Livesystem ist (und du nicht damit umziehen musst, wo kein Zugriff auf die httpd.conf besteht), würde ich die Regeln im <virtualhost> plazieren statt im Verzeichniskontext.

      Dort aber
      RewriteRule ^/wwww/(foo|bar)(/.*$|$) /wwww/index.php?$1$2 [PT]

      Naja, im Moment ist das alles nur lokal, aber langfristig will ich das eigentlich schon online zum Einsatz bringen. Von dem her bleibe ich wohl lieber in der .htaccess.
      Aber sehe ich das richtig, dass ich die Adresse in der .htaccess ohne, in der httpd.conf aber mit führendem Slash angeben muss?
      Und könntest du mir eventuell das Flag [PT] ein wenig näher erläutern? Ich werde aus der Erläuterung zu pass through nicht so wirklich schlauer …

      Welche Apache-Version nutzt du? Unter Apache 1.3 bestehen api-bedingt unter Win32-Systemen die filenames grds. in Kleinbuchstaben. Ansonsten schaue mal per RewriteLog nach, was passiert. Der Verzeichniskontext kann kompliziert werden, drum würde ich bei Zugriff auf die httpd.conf grds. den Serverkontext vorziehen. In dem Fall wäre das im <virtualhost> von webdesign.test dann

      RewriteRule ^/TestCMS/(foo|bar)(/.*$|$) /TestCMS/index.php?$1$2 [PT]

      Apache 2.2.3.
      Allerdings hat sich das Problem nun erübrigt – nach dem Versuch mit dem RewriteLog (danke auch für diesen Tipp, kannte ich noch nicht) und viel Grübelei habe ich die Ursache des Problems entdeckt: Ich hatte in /Test-CMS noch eine .htaccess Datei liegen. In dieser waren zwar alle RewriteRules auskommentiert – aber eines hatte ich vergessen: RewriteEngine On stand noch darin. Das hat wohl verhindert, dass die .htaccess-Datei aus dem Verzeichnis darüber beachtet wird, weshalb einfach _nichts_  passiert ist. Das war es nämlich auch, was der RewriteLog zeigte: gähnende Leere.

      Das Problem hat sich damit also wohl geklärt …

      Schönen Abend noch,

      Claudius