2013-01-23 23 views
6

Sto provando a reindirizzare tutte le richieste non sottodominio a www preservando l'URI della richiesta..htaccess Reindirizza URL con caratteri UTF 8

Sto usando questo nel mio file .htaccess per il reindirizzamento:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302] 

Il problema però è che quando ho una richiesta del genere:

example.com/search/? name = läkare

E reindirizza a:

www.example.com/search/?name=l%25C3%25A4kare 

Quale è il tipo di errato, lo codifica due volte. Lo controllo con questo:

<?php 

echo rawurlencode('läkare');//outputs l%C3%A4kare 
echo "\n"; 
echo rawurldecode('l%25C3%25A4kare');//outputs l%C3%A4kare 
echo "\n"; 
echo rawurldecode(rawurldecode('l%25C3%25A4kare'));//outputs läkare 

Perché lo codifica due volte e come posso impedirlo? Sto bene con 1 codifica ma 2 è troppo.

risposta

7

È necessario il flag di riscrittura NE (senza escape) per la regola. Ciò impedirà alla stringa di query già sfuggita di ottenere il doppio escape:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302,NE]