2009-07-24 19 views
0

Ich arbeite an einer Webseite, die eine URL als Parameter akzeptiert und möchte, dass sie einfach von Suchmaschinen indiziert wird. Eine Voraussetzung ist, dass jede URL als Verzeichnis angezeigt wird.Apache mod_rewrite-codierte URLs

Mein Skript ist im Format:

myscript?url=<a url>&page=1 

Ich würde Umleitungen wie etwas aussehen mag:

lookup/<a url>/page:1/ 

Die URL vorhersagbar gibt mir Mühe ... Ich möchte nur sagen, mod_rewrite zur Auswahl alles nach "Nachschlagen /" und vor "/ Seite:". Natürlich ist nichts so einfach wie es sein könnte.

Hier ist das Umschreiben, wie es jetzt ist:

RewriteEngine on 
RewriteRule ^/lookup/(.+)/page:([0-9]+)(/?)$ /myscript?url=$1&page=$2 [L] 

Dies funktioniert gut, außer es schlägt fehl, wenn URLs richtig codiert. Nehmen Sie das Beispiel "www.google.com/finance". Hier ist, was passiert, wenn ich diese URLs in meinen Browser-Adressleiste eingeben:

#this works 
lookup/www.google.com/finance/page:1/ 

#this doesn't work. url is cut off before the ? 
lookup/www.google.com/finance?foo=bar/page:1/ 

#doesn't match rewrite at all! 
lookup/www.google.com%2Ffinance/page:1/ 

ich ratlos bin, wie dies zu tun ... Wenn nicht (. +) Wählen etwas? Muss ich mod_rewrite mitteilen, um die Abfrageparameter irgendwie zu ignorieren?

Antwort

0

Try this:

RewriteCond %{THE_REQUEST} ^GET\ /lookup/([^\s]+)/page:([0-9]+)/[?\s] 
RewriteRule ^/lookup/ /myscript?url=%1&page=%2 [L] 

Aber Sie sollten wirklich Codierung berücksichtigen, die URL richtig anstatt nur raten eingebettet, wo es enden könnte. So sollte /lookup/www.google.com/finance?foo=bar/page:1/ mindestens /lookup/www.google.com/finance%3Ffoo=bar/page:1/ sein, also ist die ? Teil des URI-Pfades und nicht der Indikator für die Abfrage.

+0

Ich gebe das eine Chance. Danke für die schnelle Antwort! –

+0

Kein Würfel ... Apache mag nicht die% 2F. Wenn ich es herausnehme, funktioniert es. –

+0

Nur um klar zu sein: /lookup/www.google.com/finance%3Ffoo=bar/page:1/ funktioniert, aber /lookup/www.google.com/finance%2Ffoo=bar/page:1/ nicht. –

Verwandte Themen