Lin: Apache mod_rewrite und geschütztes Verzeichnis

Moin,

Folgendes Szenario:

Ich habe im Dokument-Root eines VHosts auf meinem Apache (2.0.52 Win)
ein Hauptskript liegen (index.html), an das sämtliche 'Pfade' als
Parameter übergeben werden sollen, also:

http://www.example.com/xxx/yyy/ > http://www.example.com/index.html?xxx/yyy/

Das klappt auch wunderbar:

[.htaccess]

  
AddHandler cgi-script .html  
DirectoryIndex index.html  
  
RewriteEngine on  
RewriteBase /  
  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^(.*) index.html?$1  

~~~[/.htaccess]  
  
Zusätzlich möchte ich nun einen passwortgeschützten Bereich einrichten,  
der via http://www.example.com/admin/ erreicht werden soll.  
Ich habe nun das /admin Verzeichnis angelegt und per .htaccess  
geschützt.  
Dahin sollen nun URLs umgeleitet werden, die mit admin/ beginnen, also:  
  
http://www.example.com/admin/xxx/yyy/ >  
http://www.example.com/admin/index.html?xxx/yyy/  
  
Sobald ich nur http://www.example.com/admin/ aufrufe, funktioniert  
das auch, wenn ich das richtig verstehe, verhindert die !-d Condition  
hier das Umschreiben der URL, weil Apache merkt, dass das admin/ Verzeichnis wirklich existiert.  
  
Sobald ich aber eben http://www.example.com/admin/xxx/yyy/ aufrufe,  
geht der redirect an die index.html im Root-Dir.  
  
Nun meine Frage(n):  
  
1\. Wie muss meine Regel aussehen, so dass admin/-URLs an die admin/index.html bekomme, und alle anderen an die index.html im Hauptverzeichnis?  
  
Ich habe es schon mit folgendem versucht:  
~~~apache
  
RewriteCond %{REQUEST_FILENAME} ^admin.*  
RewriteRule ^(.*) admin/index.html?$1  

Ich verstehe aber noch nicht so ganz, in welcher Reihenfolge die
Redirects angewendet werden, bzw. wie ich mehrere definieren kann.

2. Muss ich das admin-Verzeichnis überhaupt 'physikalisch' anlegen
um es mittels .htaccess zu schützen?

Wäre toll, wenn ihr mir hierbei auf die Sprünge helfen könntet.

Schönen Tag,

Lin

--
Mister rabbit says, "A moment of realization is worth a thousand prayers."
  1. Liebe(r) Lin,

    Moin,

    Folgendes Szenario:

    Ich habe im Dokument-Root eines VHosts auf meinem Apache (2.0.52 Win)
    ein Hauptskript liegen (index.html), an das sämtliche 'Pfade' als
    Parameter übergeben werden sollen, also:

    http://www.example.com/xxx/yyy/ > http://www.example.com/index.html?xxx/yyy/

    Das klappt auch wunderbar:

    [.htaccess]

    AddHandler cgi-script .html
    DirectoryIndex index.html

    RewriteEngine on
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*) index.html?$1

      
    ~~~apache
    RewriteCond %{REQUEST_URI} !(/admin/)  
    RewriteRule admin/(.*/)?$ /sonstewohin [QSA]
    

    [/.htaccess]

    Dieses [QSA] heißt "query string attached" und sorgt dafür, dass Deine GET-Parameter weitergereicht werden. Dabei ist es aber sinnvoll, dass Du den Pfad nicht einfach-nur-so anhängst, sondern dem Pfad einen echten Variablennamen verleihst. Ich löse das so: RewriteRule ^(.*) index.html?pfad=$1

    Wenn Du kein Verzeichnis "/admin/" hast, dann weiß ich nicht, ob Du mit dem Apachen dann eine Passwortabfrage erhälst...

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. RewriteCond %{REQUEST_URI} !(/admin/)

      RewriteRule admin/(.*/)?$ /sonstewohin [QSA]

        
      Danke! Funzt wie ne 1!  
        
      Best,  
        
      Lin
      
      -- 
      Mister rabbit says, "A moment of realization is worth a thousand prayers."