2009-04-14 6 views
0

J'essaie de réécrire un URL avec des données GET à partir d'un formulaire. Cela fonctionne très bien lors de la validation de chaînes avec uniquement des lettres en anglais. Mais quand je commets des caractères norvégiens (c'est une page norvégienne), seule l'URL non réécrite est affichée. Mes phrases semble mod_rewrite comme ceci:écriture mod_rewrite pour les données de formulaire

RewriteCond %{REQUEST_URI} /resultpage.php$ 
RewriteCond %{QUERY_STRING} ^querystring=([a-zæøåäëöA-ZÆØÅÄËÖ0-9-\+]+)$ 
RewriteRule ^(.*)$ /sok/%1? [R=301,L] 
RewriteRule ^sok/(.*)$ /resultpage.php?querystring=$1&a=1 [L] 

J'utilise des caractères norvégiens URL pas posté d'une forme et cela fonctionne très bien.

Des suggestions?

Répondre

1

Les caractères norvégiens sont susceptibles d'être codés en URL.

Je ne peux pas voir à partir des docs comment mod réécrire va gérer ces.

à une estimation

RewriteCond %{QUERY_STRING} ^querystring=([a-zA-Z0-9-+%]+)$ 

peut fonctionner comme il ramassera les URL encodée caractères étendus, mais il permettra tout char, pas seulement le jeu que vous voulez. Vous pouvez toujours corriger cela au niveau de la couche d'application.

1

J'utiliser [^&] à la place:

RewriteCond %{REQUEST_URI} ^/resultpage\.php$ 
RewriteCond %{QUERY_STRING} ^querystring=([^&]+)$ 
RewriteRule ^resultpage\.php$ /sok/%1? [R=301,L] 

Et vous pouvez encore simplifier:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /resultpage\.php\?querystring=([^&\s]+)\s 
RewriteRule ^resultpage\.php$ /sok/%1? [R=301,L] 

En utilisant cette solution, vous pouvez même laisser le a=1 drapeau du deuxième RewriteRule loin.

Questions connexes