Probleme mit mod_rewrite / .htaccess

Mordor

Registered User
Mahlzeit allerseits
Nach mehrstündigem suchen, und ner guten Hilfestellung von Elias im irc, bin ich noch nicht wirklich am Ende der Lösung.

Folgendes Problem:
Ich wollte für eine Seite Rewritregeln in eine .htaccess-Datei schreiben, was aber nicht funktioniert. Wenn ich diese Regel jedoch direkt in die vhost übernehme, gehen sie einwandfrei.

Am Anfang war das Problem dass AllwoOverride falsch gesetzt war. Das ist jetzt aber nicht mehr so, das steht auf all. Wenn ich irgendwelchen Müll in die .htaccess-Datei schreibe, bekomme ich vom Server einen internal-Servererror wieder. Also kann ich wohl davon ausgehen, dass Apache die .htaccess auch liest. Jedoch die Rewrite-Regeln in dieser Datei werden einfach nicht beachtet. Ich bin mit meinem Latein schön langsam am Ende, vieleicht weiss jemand anderes weiter.

.htaccess:
Code:
RewriteCond %{REQUEST_URI} ^/index.html$ [NC]
RewriteRule index.html /index.php [L]
RewriteCond %{REQUEST_URI} ^/(.*)/$ [NC]
RewriteRule /(.*)/ /index.php?main=$1 [L]
RewriteRule %{REQUEST_URI} ^/(.*)/(.*).html [NC]
RewriteRule /(.*)/(.*).html /index.php?main=$1&submain=$2 [L]
vhost:
Code:
VirtualHost *>
        ServerAdmin webmaster@domain.tld
        ServerName domain.tld
        ServerAlias www.domain.tld

        DocumentRoot /srv/domain.tld/htdocs

        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
        ServerSignature Off
        <Directory /srv/domain.tld/htdocs>
                Order deny,allow
                Allow from all
                Options +FollowSymlinks +SymlinksIfOwnerMatch
                AllowOverride All
        </Directory>
        <Location />
                Options +FollowSymlinks +SymlinksIfOwnerMatch
                Order allow,deny
                Allow from All
        </Location>
        RewriteEngine On
        RewriteLog /srv/domain.tld/rewrite.log
        RewriteLogLevel 5
</VirtualHost>

System:
Debian Etch
Apache2.2
PHP 5.2

Bei einer Anfrage mit den Regeln in der .htaccess steht in der rewrite.log folgendes:
Code:
84.154.100.xxx - - [13/Dec/2007:12:58:27 +0100] [www.domain.tld/sid#818dd48][rid#83a5e40/initial] (2) init rewrite engine with requested uri /impressum/
84.154.100.xxx - - [13/Dec/2007:12:58:27 +0100] [www.domain.tld/sid#818dd48][rid#83a5e40/initial] (1) pass through /impressum/
84.154.100.xxx - - [13/Dec/2007:12:58:59 +0100] [www.domain.tld/sid#818dd48][rid#83a1e30/initial] (2) init rewrite engine with requested uri /
84.154.100.xxx - - [13/Dec/2007:12:58:59 +0100] [www.domain.tld/sid#818dd48][rid#83a1e30/initial] (1) pass through /
In den error.log von Apache wird nur ein 404-Fehler aufgezeigt.

Was auffällig ist, mod_Rewrite liest die Regeln aus der .htaccess überhaupt nicht. Nicht einmal die RewriteCond wird überprüft.

Vielleicht hat ja jemand nen Lösungsansatz,

Gruß Mordor
 
Jedoch die Rewrite-Regeln in dieser Datei werden einfach nicht beachtet.
Das würde ich gerne mal genau testen und zwar folgendermaßen: "RewriteEngine On" aus der VHOSTS raus und in die HTACCESS rein. Dann bitte in die HTACCESS nur reinschreiben:

Code:
RewriteEngine On
RewriteRule ^  http://www.google.de [R,L]
und rufe "deine-domain.tld/abc/" auf.

Wenn das geht, geht auch Deine MOD_REWRITE und wir müssen mal tiefer forschen.

Den Tipp habe ich aus:
mod_rewrite FAQ; Fehlerquellen/-meldungen (HTTP 403/404/500) @ modrewrite.de

Ich hatte damals auch das Problem, dass in der VHOSTS alles lief und in der HTACCESS nichts.

Ich kann den Post noch einmal raussuchen, wenn Du möchtest.

Gruß
Claus
 
Hallo Claus

Hab das jetzt mal ausprobiert. Das funktioniert, Erleitet dann auf google.de weiter, sobald ich die Seite aufrufe. Also sollte mod_rewrite funktionieren. Dann sind wohl die Regeln nicht ganz einwandfrei.

Gruß Mordor

Edit:
Ich weiss nicht, was ich gemacht habe. Ich hab grad die Regeln noch mal nach und nach aufgebaut, und plötzlich funktionieren sie.
Die Schauen jetzt so aus:
Code:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index.html$ [NC]
RewriteRule index.html index.php [L]
RewriteCond %{REQUEST_URI} ^/(.*)/$ [NC]
RewriteRule (.*)/ index.php?main=$1 [L]
RewriteRule %{REQUEST_URI} ^/(.*)/(.*).html [NC]
RewriteRule (.*)/(.*).html index.php?main=$1&submain=$2 [L]
Das einzige was anders ist, sind die vorangegangenen Slashes.
Auf jedenfall noch mal danke, denn irgendwo hats irgendwie klick gemacht.
 
Last edited by a moderator:
Back
Top