Apache mod_rewrite und geschütztes Verzeichnis
Lin
- webserver
0 Felix Riesterer0 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
~~~[/.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
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.htmlRewriteEngine 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.
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."