Ankündigung

Einklappen
Keine Ankündigung bisher.

mod_rewrite + vhost + .htaccess

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mod_rewrite + vhost + .htaccess

    hallo,

    ich habe das Problem, dass einen Fehler 500 bekomme (mehr als 10 Rekrusionen beim Aufruf) wenn ich meine vhosts via Rewrite Rules manage und im host eine htaccess file liegen habe

    <VirtualHost *:80>

    ServerName **ytest.de
    ServerAlias *.**est.de
    DirectoryIndex index.html index.php

    RewriteEngine on
    RewriteMap lowercase int:tolower

    RewriteCond D:/***/${lowercase:%{SERVER_NAME}} !-f
    RewriteCond D:/***/htdocs/${lowercase:%{SERVER_NAME}} !-d
    RewriteRule ^/(.*)$ D:/***/htdocs/any/$1 [L]

    RewriteRule ^/(.*)$ D:/***/htdocs/${lowercase:%{SERVER_NAME}}/$1 [L]

    <Directory "D:\***\htdocs">
    Options Indexes +FollowSymLinks Includes ExecCGI
    Order allow,deny
    Allow from all
    AllowOverride All
    </Directory>

    </VirtualHost>
    alles läuft super, nur werden weiter htaccess files ignoriert, bzw führen zu einem 500er Fehler (mehr als 10 Rekrusionen beim Aufruf). im Ordner findet sich ein 0-8-15 Cakephp Skript


  • #2
    RewriteLog einschalten, und untersuchen, was passiert.

    Kommentar


    • #3

      192.168.0.* - - [23/Jul/2010:14:25:11 +0200] [PAGE/sid#50da08][rid#3965060/initial/redir#10] (1) [perdir D:/***/PAGE/] internal redirect with /PAGE/app/webroot/PAGE/app/webroot/PAGE/app/webroot/PAGE/app/webroot/PAGE/app/webroot/PAGE/app/ webroot/PAGE/app/webroot/PAGE/app/webroot/PAGE/app/webroot/PAGE/app/webroot/PAGE/ app/webroot/favicon.ico [INTERNAL REDIRECT]
      das sieht recht böse aus, er macht immer und immer weiter.

      die Rule von CakePHP sieht so aus:

      RewriteEngine on
      RewriteRule ^$ app/webroot/ [L]
      RewriteRule (.*) app/webroot/$1 [L]
      Hier mal ein Aus den Logfiles:

      (3) applying pattern '^/(.*)$' to uri '/app/'
      (3) applying pattern '^/(.*)$' to uri '/app/'
      (2) rewrite '/app/' -> 'D:/****/app/'
      (2) local path result: D:/****/app/
      (1) go-ahead with D:/****/app/ [OK]
      (3) [perdir D:/****/app/] strip per-dir prefix: D:/****/app/ ->
      (3) [perdir D:/****/app/] applying pattern '^$' to uri ''
      (2) [perdir D:/****/app/] rewrite '' -> 'webroot/'
      (3) [perdir D:/****/app/] add per-dir prefix: webroot/ -> D:/****/app/webroot/
      (2) [perdir D:/****/app/] strip document_root prefix: D:/****/app/webroot/ -> /some-cakephp.test***st.de/app/webroot/
      (1) [perdir D:/****/app/] internal redirect with /some-cakephp.testtweak.an***e/app/webroot/ [INTERNAL REDIRECT]
      (2) init rewrite engine with requested uri /some-cakephp.test***st.de/app/webroot/
      (3) applying pattern '^/(.*)$' to uri '/some-cakephp.test***st.de/app/webroot/'
      (3) applying pattern '^/(.*)$' to uri '/some-cakephp.test***st.de/app/webroot/'
      (2) rewrite '/PAGE/app/webroot/' -> 'D:/ZendCe/Apache2/htdocs/PAGE/PAGE/app/webroot/'
      die Letzte Rule zeigt eindeutig, dass er nicht aufhört und weiter die PAGE mit an den Pfad hängt, obwohl in der vorletzten Zeile schon mein Ideal erreicht wurde.

      Kommentar


      • #4
        Zitat von notyyy Beitrag anzeigen
        die Letzte Rule zeigt eindeutig, dass er nicht aufhört
        Na dann wirst du wohl deine Rule bzw. das Muster spezifischer fassen, bzw. noch eine andere Abbruchbedingung (ggf. auch per RewriteCond) hineinbringen müssen.


        Da du aber noch nicht mal klar beschrieben hast, was deine Eingabedaten sind und was das erwartete Ergebnis, steige ich an dieser Stelle aus.
        Mir nur aus dem gezeigten Regelwerk und dem Log dazu herleiten zu müssen, was du eigentlich erreichen willst, ist mir nämlich zu umständlich.
        Und du bist eigentlich schon lange genug hier dabei, dass du besser wissen müsstest, wie brauchbare Problem-/Aufgaben-Beschreibungen aussehen sollten.

        Kommentar


        • #5
          Hallo,

          ich dachte die problematik gut beschrieben zu haben.

          ich habe einen Apache Server am laufen (lokal zum testen) um nicht permanent neue Vhosts anlegen zu müssen, habe ich nun einen vhost angelegt, welcher auf Ordnerebene läuft:

          htdocs/
          ~example.com
          ~example2.com

          dafür ist diese Rule im Vhost nötig:

          RewriteRule ^/(.*)$ D:/***/htdocs/${lowercase:%{SERVER_NAME}}/$1 [L]

          klappt wunderbar.

          nun habe ich das Problem, dass in dem Projekt eine htaccess liegt, diese routet in den Ordner /app/webroot. meine Rule für den Vhost macht daraus jedoch example.com/example.com/app/webroot. daraufhin geht es immer und immer weiter bis der Apache einen 500er Fehler wirft. Ich muss also irgendwie in meiner Rewrite Rule im Vhost es schaffen diese Kette zu unterbrechen.

          ist das möglich?

          // edit:

          was mich etwas verwirrt ist, dass der Apache trotz des [L] weiter macht und die gerewritete URL wiederholt durch mod_rewrite jagt und somit eine Endlosschleife entsteht.

          // edit:

          ich bin nun auf
          UseCanonicalName Off
          VirtualDocumentRoot D:/***/htdocs/%0
          umgestiegen, Problem existiert weiter. Wenn ich AllowOverwrite auf none Stelle wird die Seite korrekt ausgeliefert. Verträgt sich VirtualDocumentRoot nicht mit htaccess files in denen Rewrite Rules sind?

          Kommentar

          Lädt...
          X