2010-07-23 15 views
8

Cosa c'è di sbagliato in questa regola di riscrittura?RewriteRule che conserva i parametri GET

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

Voglio semplicemente "index.php? Url =" da aggiungere dopo api/e prima che il resto dei parametri GET.

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

a

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

Cosa c'è di sbagliato con (. +) Per ottenere tutto dopo api /?

+0

^api/([a-zA-Z0-9/_ \ & \ = \%] +) $ funziona ma non funzionerà con caratteri specifici della lingua come åäöøæé e così via ... Ecco perché vorrei come^api /(.+)$ a lavorare invece. . dovrebbe significare qualsiasi carattere tranne l'interruzione di riga o la fine della stringa, quindi non capisco perché non funziona. – Tirithen

+0

possibile duplicato di [mantenere i parametri url con htaccess rewrite] (http://stackoverflow.com/questions/4071155/keep-url-parameters-with-htaccess-rewrite) –

risposta

19

La regex sul RewriteRule viene eseguito solo contro la parte di percorso dell'URL, non i parametri di query. Fortunatamente c'è lo [QSA] flag per preservare i parametri di query esistenti.

+0

Meraviglioso! Questo ha risolto i miei problemi! Ho anche trovato una funzione JS per url codificare tutti i non a-zA-Z0-9_. personaggi http://cass-hacks.com/articles/code/js_url_encode_decode/ – Tirithen

+0

Grazie mille! –

+0

QSA mi ha salvato! Grazie Signore! –

0

Stai facendo qualcosa per fermare la ricorsione infinita?

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

o qualche equivalente

+0

Avevo [L] prima ma non ha diffrence. Il mio problema è che apache2 segnala che l'unico parametro get è [url] => index.php, tutti gli altri parametri sono spariti e il parametro url dovrebbe essere 'image/upload'. Quando uso la regola^api/([a-zA-Z0-9/_] +) $ invece il parametro url è 'image/upload' ma perdo tutti gli altri parametri GET. – Tirithen

+0

Inoltre non sto provando a fare un reindirizzamento, basta avere il testo tra api/e prima del primo e ottenere la stringa preceduta da "index.php? Url =" e il resto dei parametri GET mantenuti – Tirithen

+0

Come funziona ' R = 301' lavoro qui? Non è presente nei documenti all'indirizzo http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

0

penso che si deve scrivere il nome di dominio prima la roba regex. Come questo:

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