Hier ist meine .htaccess-Datei:.htaccess - Verarbeitung stoppen wenn rewriterule true?
Options +FollowSymlinks
RewriteEngine on
Rewritecond %{http_host} ^mysite.com [nc]
Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /404.php
Der 1. RewriteCond/RewriteRule Block ist der Benutzer www zu umleiten, wenn sie die Adresse ohne www eingegeben.
Der zweite Rewritecond/Rewriterule-Block soll den Benutzer auf eine Seite umleiten, die ich erstellt habe, wenn sie eine nicht existierende Adresse eingeben.
Jede dieser Regeln arbeitet auf seinem eigenen:
Wenn meine .htaccess-Datei, um sie nur den ersten Block enthält, dann erfolgreich leiten nicht-www-Adressen an die www-Adresse.
Und wenn eine nicht existierende Adresse eingegeben wird, wird der Benutzer erfolgreich auf meine Seite 404.php umgeleitet.
Wenn jedoch die .htaccess beide Blöcke enthält, und einem nicht-www-Adresse eingegeben wird, wird anstelle einer erfolgreichen Weiterleitung an die WWW-Adresse, geschieht folgendes:
(1) Das folgende wird angezeigt auf der Seite:
dauerhaft verschoben
Das Dokument hier bewegt hat.
Darüber hinaus wurde ein 500 Internal Server Error Fehler beim Versuch, ein ErrorDocument verwenden, um die Anforderung zu behandeln.
Apache/1.3.41 Server bei mysite.com Port 80
(2) Der folgende Eintrag wird in dem Fehlerprotokoll erzeugt:
[Fr 4. Mai 01.54.19 2012] [Fehler ] [client 109.109.109.109] mod_rewrite: maximale Anzahl an internen Weiterleitungen erreicht. Angenommen, Konfigurationsfehler. Verwenden Sie 'RewriteOptions MaxRedirects', um das Limit bei Bedarf zu erhöhen.
Ich gehe davon aus, dass eine Endlosschleife irgendwie erzeugt wird.
Ich frage mich, ob das Angeben der .htaccess-Datei zum Beenden der Verarbeitung von Befehlen, wenn die erste Bedingung erfüllt ist, das Problem lösen würde. Also weiß jemand, wie man das macht?
(Randbemerkung. Im Allgemeinen finde ich die Dokumentation da draußen auf .htaccess absolut entsetzlich zu sein. Ich frage mich, ob jemand ähnlich anfühlt.)
Vielen Dank im Voraus.
Ich habe Ihren Rat, so dass die einzige Änderung meiner Datei ist, dass der erste Rewrite Regel hat folgendes: 'Rewriterule^(. *) $ http://www.mysite.com/$1 [r = 301, nc, L]' Und alles scheint jetzt richtig zu funktionieren. Vielen Dank. – oyvey
Keine Notwendigkeit, die Site erneut zu iterieren. Und: Apache RewriteRules sind standardmäßig gierig. ☞ 'RewriteRule (. *) $ 1 [R = 404, L]' –