2009-06-14 22 views
0

Ich verwende den folgenden Code in meinem .htaccess:Warum funktioniert diese Umschreiberegel nicht?

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule (.*) $1\.php [L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ /$1 [R=301,L] 

# Special rewrite rules 
# ideas/<id> 
RewriteRule ^ideas/([0-9]+)$ idea\?id=$1 
# users/<name> 
RewriteRule ^users/(.+)$ users\?name=$1 

Die Ideen/Regel funktioniert gut, wie ich erwarten würde es zu, aber die Benutzer/Regel scheint nicht zu. Es gibt mir ein HTTP-Fehler 500 und das Apache-Log sagt es die Menge an Umleitungen zur Verfügung überschritten hat:

[Sun 14. Juni 2009 10.58.39] [Fehler] [client 127.0.0.1] überschritten Antrag die Grenze von 10 internen Umleitungen aufgrund eines möglichen Konfigurationsfehlers. Verwenden Sie 'LimitInternalRecursion', um das Limit bei Bedarf zu erhöhen. Verwenden Sie 'LogLevel debug' eine Rückverfolgung zu erhalten, referer:. http://localhost/users

Die URL-I-Tests bin es auf/Users/ross, die sollte gut funktionieren./ideas/1 funktioniert definitiv gut.

Antwort

1

Versuchen Sie es in dieser Reihenfolge:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ /$1 [R=301,L] 

RewriteRule ^ideas/([0-9]+)$ idea?id=$1 
RewriteRule ^users/(.+)$ users?name=$1 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule (.*) $1.php [L] 
+0

Dies bewirkt, dass die Ideen/ Seiten mit dem gleichen Fehler funktioniert. – Ross

+0

Und was sagt das Serverprotokoll dazu? Ein Fehler von 500 kann alles bedeuten. – Gumbo

+0

Aktualisierte die Frage. – Ross

1

Was Sie, die Situation zu debuggen könnte helfen, ist es, die Neufassungen remote zu machen (z sie HTTP machen senden Umleitungen). Auf diese Weise sehen Sie, wie die Anforderungen neu geschrieben werden, um das Problem zu beheben.

1

Darf ich annehmen, dass Sie eine Datei users.php und idea.php haben? Dann können Sie direkt zu dieser Datei umleiten, ohne dass Sie noch eine weitere Rewrite-Runde benötigen. Also, für diese beiden Regeln:

RewriteRule ^ideas/([0-9]+)$ idea.php?id=$1 
RewriteRule ^users/(.+)$ users.php?name=$1 

(auch: keine Notwendigkeit, die Fragezeichen in der Folge zu entkommen)

By the way: Warum ist users.php Plural während idea.php nicht ist? Wie handelst du/ideas/abc und so weiter?

+0

Das Plural Bit war ein Fehler, das habe ich seitdem korrigiert. Das Ändern der Weiterleitungen, um auf die Dateien zu zeigen, funktioniert jedoch direkt (obwohl ich daran interessiert wäre, herauszufinden, warum sie nicht den früheren Regeln gehorcht). – Ross

+0

Es gibt keinen Unterordner "Benutzer" oder "Ideen" in Ihrem Dateisystem, der den Unterschied zwischen den beiden Ergebnissen hätte verursachen können? Ich finde, die früheren Regeln waren nur unvollständig (und meiner Meinung nach auch deine eigene Antwort) ... Wenn du das Skript spezifizierst, kannst du sogar [L] hinzufügen, um anzuzeigen, dass du fertig bist. – Arjan

0

Hinzufügen a /, bevor die Dateien dieses Problem behoben:

RewriteRule ^ideas/([0-9]+)$ ideas?id=$1 
RewriteRule ^users/(.+)$ users?name=$1 

zu:

RewriteRule ^ideas/([0-9]+)$ /ideas?id=$1 
RewriteRule ^users/(.+)$ /users?name=$1 
+0

Sie verwenden keinen Pfad in der URL, wie zum Beispiel example.org/folder/users/abc, oder? Und warum schreiben Sie nicht das Skript, das Sie brauchen, anstatt Apache zu fragen, was mit/users tun? Name = $ 1? – Arjan

Verwandte Themen