2010-11-30 23 views
2

Ich habe dies in meinem .htaccess:RewriteRule stimmt nicht überein?

RewriteEngine On 
RewriteBase/
RewriteRule ^url/(.*)$ url.php?url=$1 [L] 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

Warum die erste Regel nicht http://mydomain.ext/url/http://www.google.com/ nicht überein, aber die zweite ???

Edit: es scheint zu funktionieren, wenn ich die letzte Zeile auskommentieren, aber natürlich kann ich das nicht tun. Was ist los?

Edit2: Wenn ich es so weit ändern, funktioniert es:

RewriteEngine On 
RewriteBase/
RewriteRule ^url/(.*)$ url.php?url=$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

Kann mir jemand erklären, warum die vorherige Version wie erwartet nicht funktioniert?

Antwort

1

Die Anforderung wird wahrscheinlich zweimal umgeschrieben: /url/http://…/url.php/index.php. Schließen Sie diesen Pfad von der zweiten Regel aus und es sollte funktionieren:

RewriteCond $1 !=url.php 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 
+0

Danke, wie in meinem Beitrag erwähnt, 'RewriteCond% {REQUEST_FILENAME}} hinzufügen! -f RewriteCond% {REQUEST_FILENAME}! -d' vor der letzten Zeile scheint die gleiche Wirkung zu haben, aber Ihre Lösung ist kürzer. – Alfonso

+0

@Alfonso: Aber Ihre Lösung ist allgemeiner als meine und schließt auch andere vorhandene Dateien und Verzeichnisse aus. – Gumbo

0

Wahrscheinlich, weil der "Start der Linie Anker": "^" URLs übereinstimmt mit "URL /".

Versuchen Sie zum Beispiel eine "^.*url/(.*)$".

+0

Fängt die Anfrage URL nicht mit 'URL /'? z.B. 'http: //foo.bar/url/http: // www.google.com /' – Alfonso

Verwandte Themen