2012-05-04 11 views
9

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.

Antwort

10
+1

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

+0

Keine Notwendigkeit, die Site erneut zu iterieren. Und: Apache RewriteRules sind standardmäßig gierig. ☞ 'RewriteRule (. *) $ 1 [R = 404, L]' –

3

können Sie versuchen, diesen Code statt:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

ErrorDocument 404 404.php 

Rewritecond %{HTTP_HOST} ^mysite\.com$ [NC] 
Rewriterule^http://www.mysite.com%{REQUEST_URI} [R=302,NC,L] 

Sobald Sie überprüfen, ob es funktioniert gut, dann ändern Sie R=302-R=301.

+0

Danke. Ursprünglich habe ich Redirects für fehlerhafte Adressen über ErrorDocument behandelt, aber wenn ich mich richtig erinnere, funktionierte das nicht für Adressen, die mit PHP enden, und das ist der Grund, warum ich zum aktuellen Code wechselte. – oyvey

Verwandte Themen