2010-07-23 6 views
8

Qu'est-ce qui ne va pas avec cette règle de réécriture?RewriteRule qui préserve les paramètres GET

RewriteRule ^api/(.+)$ api/index.php?url=$1 [L] 

Je veux simplement "index.php? Url =" à ajouter après api/et avant le reste des paramètres get.

api/image/upload&arg1=1&text=lorem+ipsum 

à

api/index.php?url=image/upload&arg1=1&text=lorem+ipsum 

Quel est le problème avec (. +) Pour obtenir après tout api /?

+0

^api/([a-zA-Z0-9/_ \ & \ = \%] +) $ œuvres, mais ne fonctionnera pas avec des caractères spécifiques de langue comme åäöøæé et ainsi de suite ... C'est pourquoi je comme^api /(.+)$ pour travailler à la place. . devrait signifier n'importe quel caractère excepté le saut de ligne ou la fin de la corde ainsi je ne comprends pas pourquoi cela ne fonctionne pas. – Tirithen

+0

double possible de [garder les paramètres d'URL avec rewrite htaccess] (http://stackoverflow.com/questions/4071155/keep-url-parameters-with-htaccess-rewrite) –

Répondre

19

La regex sur RewriteRule n'est exécutée que sur la partie path de l'URL, pas sur les paramètres de la requête. Heureusement, il y a le [QSA] flag pour préserver les paramètres de requête existants.

+0

Merveilleux! Cela a résolu mes problèmes! J'ai aussi trouvé une fonction JS pour encoder tous les non-zA-Z0-9_. caractères http://cass-hacks.com/articles/code/js_url_encode_decode/ – Tirithen

+0

Merci beaucoup! –

+0

QSA m'a sauvé! Merci Monsieur! –

0

Faites-vous quelque chose pour arrêter la récursion infinie?

RewriteRule ^api/(.+)$ api/index.php?url=$1 [R=301,L] 

ou un

équivalent
+0

j'avais [L] avant, mais il ne fait aucune Différence Mon problème est que apache2 rapporte que le seul paramètre get est [url] => index.php, tous les autres paramètres ont disparu et le paramètre url devrait être 'image/upload'. Lorsque j'utilise la règle^api/([a-zA-Z0-9/_] +) $ à la place, le paramètre url est 'image/upload' mais je perds tous les autres paramètres GET à la place. – Tirithen

+0

Je n'essaie pas non plus de faire une redirection, il suffit d'obtenir le texte entre api/et avant le premier & pour obtenir la chaîne préfixée par "index.php? Url =" et le reste des paramètres GET préservés – Tirithen

+0

Comment ' R = 301' travail ici? Il n'est pas dans les docs à http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

0

Je pense que vous devez écrire votre nom de domaine avant les choses regex. Comme ceci:

RewriteRule ^(.+).com/api/(.*)$ "$1.com/api/index.php?url=$2" [R=301,L] 
Questions connexes