• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

RewriteRule und "Last"

Hallo,

ich komme irgendwie nicht weiter...

Unter Linux SUSE wurde Apache 2.2 zusammen mit suEXEC und suPHP installiert.

In der Konfiguration wurden nachstehende Module aktiviert:

- suexec
- authz_host
- actions
- alias
- auth_basic
- authn_file
- authz_user
- authz_groupfile
- autoindex
- cgi
- dir
- env
- expires
- include
- log_config
- mime
- negotiation
- setenvif
- satus
- userdir
- asis
- headers
- imagemap
- rewrite
- speling
- php5
- perl
- suphp

Rewrite wurde wie folgt konfiguriert:

RewriteEngine On
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 9

# Stop Rewrite wenn auf Typo-Ordner zugegriffen wird
RewriteRule ^(typo3_src|typo3|t3lib|tslib|fileadmin|typo3conf|typo3temp|uploads|showpic\.php|favicon\.ico)/ - [L]

RewriteRule ^typo3$ typo3/index_re.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .*\.(html|pdf)$ /index.php [L]

------------------

Beim Aufruf der Webseite

http://localhost/typo3/sysext/t3skin/noborder.html

wird diese ebenfalls umgeleitet auf "/index.php".

Nach meinem Wissen nach trifft die erste RewriteRule-Regel zu, da hier die Phrase "typo3" in der Aufgerufenen URL an erster Stelle nach Localhost angegeben wurde.

Der RewriteRule-Parameter [L] besagt, dass beim Zutreffen dieser Regel keine weiteren RewriteRule-Anwendungen mehr ausgeführt werden.

In der Log-Datei ist nachstehendes protokolliert worden:

(2) init rewrite engine with requested uri /typo3/sysext/t3skin/noborder.html
(3) applying pattern '^(typo3_src|typo3|t3lib|tslib|fileadmin|typo3conf|typo3temp|uploads|showpic\.php|favicon\.ico)/' to uri '/typo3/sysext/t3skin/noborder.html'
(3) applying pattern '^typo3$' to uri '/typo3/sysext/t3skin/noborder.html'
(3) applying pattern '.*\.(html|pdf)$' to uri '/typo3/sysext/t3skin/noborder.html'
(4) RewriteCond: input='/typo3/sysext/t3skin/noborder.html' pattern='!-f' => matched
(4) RewriteCond: input='/typo3/sysext/t3skin/noborder.html' pattern='!-d' => matched
(4) RewriteCond: input='/typo3/sysext/t3skin/noborder.html' pattern='!-l' => matched
(2) rewrite '/typo3/sysext/t3skin/noborder.html' -> '/index.php'
(2) local path result: /index.php
(2) prefixed with document_root to /srv/www/htdocs/index.php
(1) go-ahead with /srv/www/htdocs/index.php [OK]

Wie man sieht, ist die Bedingung in Zeile 2 zutreffend. Dennoch werden nachfolgende RewriteRule-Anweisungen ausgeführt.

Wer kann mir erklären, warum nach der ersten RewriteRule-Anweisung alle weiteren ebenfalls ausgeführt werden, obwohl in der ersten RewriteRule-Anweisung der Parameter [L] angegeben wurde?
 
Hallo BigBen2003,

vorsichtshalber möchte ich zunächst anmerken, daß ich wahrlich kein Experte für Apache-Rewrite-Rules bin. :)

Meine Vermutung, warum Deine Rewrite-Regeln nicht wie gewünscht funktionieren, ist folgende: Dir fehlt im regulären Ausdruck jeweils der führende Slash. Betrachte zum Beispiel folgende Regel:

Code:
RewriteRule ^typo3$ typo3/index_re.php [L]
Die Requests, die beim Server ankommen, sehen dagegen so aus:

Code:
/typo3/...
Aufgrund des fehlenden Slashes am Anfang Deines Suchmusters kann das nicht matchen...

Oder unterliege ich einem Denkfehler?

Viele Grüße,
gameboy.
 
Hallo Hacker,

vielen Dank für Deine Antwort.

Ich habe Deine Lösung ausgetestet. Es hat leider nicht funktioniert.

Erst nachdem ich die gleichen Befehle in einer .htaccess-Datei zugelassen habe, werden die URLs korrekt umgeschrieben.

Ich habe allerdings dafür keine Erklärung, warum es über eine .htaccess-Datei funktioniert und über die Configurations-Datei nicht. Hier muss ich noch weiter nachforschen.
 
Oben