2009-07-24 8 views
0

Je travaille sur une page Web qui prend une URL comme paramètre, et souhaite qu'elle soit facilement indexée par les moteurs de recherche. Une exigence est que chaque URL apparaisse comme un répertoire.Apache mod_rewrite URL codées

Mon script est dans le format:

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

J'aimerais réoriente de regarder quelque chose comme:

lookup/<a url>/page:1/ 

L'URL me donne du mal ... Je on pouvait s'y attendre veux juste dire mod_rewrite pour sélectionner quoi que ce soit après "lookup /" et avant "/ page:". Bien sûr, rien n'est jamais aussi simple que cela pourrait être.

Voici le rewrite comme il est maintenant:

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

Cela fonctionne très bien, sauf qu'il échoue lorsque les URL sont correctement codées. Prenons l'exemple de "www.google.com/finance". Voici ce qui se passe quand j'entre ces URL dans ma barre d'adresse du navigateur:

#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/ 

Je suis à une perte quant à la façon de le faire ... Ne devrait pas (. +) Sélectionnez quoi que ce soit? Ai-je besoin de dire à mod_rewrite d'ignorer les paramètres de requête en quelque sorte?

Répondre

0

Essayez ceci:

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

Mais vous devriez vraiment envisager l'encodage cette URL correctement intégrée au lieu de simplement deviner où il pourrait finir. Donc /lookup/www.google.com/finance?foo=bar/page:1/ devrait être au moins /lookup/www.google.com/finance%3Ffoo=bar/page:1/ de sorte que le ? fait partie du chemin d'accès URI et non l'indicateur de la requête.

+0

Je vais essayer. Merci pour une réponse rapide! –

+0

Pas de dés ... apache n'aime pas le% 2F. Quand je le sors, ça fonctionne. –

+0

Pour être clair: /lookup/www.google.com/finance%3Ffoo=bar/page:1/ fonctionne, mais /lookup/www.google.com/finance%2Ffoo=bar/page:1/ ne fonctionne pas. –

Questions connexes