Domanda

Sto cercando di riscrivere gli URL con più sottostringhe. Una sottostringa viene richiesta come sottodirectory, mentre altre vengono richieste come normali parametri della stringa di query.

Ad esempio, vorrei riscrivere gli URL da

http://www.mysite.com/mark/friends?page=2

a

http://www.mysite.com/friends.php?user=mark&page=2

Sono in grado di farlo, ad eccezione del carattere del punto interrogativo. Ecco la mia regola di riscrittura:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]

Se cambio il punto interrogativo con qualsiasi altro personaggio, funziona alla grande. Sembra che il problema sia che il '?' il carattere viene interpretato in modo errato come l'inizio di una nuova stringa di query.

Devo trasmettere tutti i parametri che compaiono dopo / user / friends come sono. Come posso farlo?

È stato utile?

Soluzione

Dovresti usare il flag [QSA] invece di provare a riscrivere la stringa di query. [QSA] passa la stringa di query all'URL riscritto.

Quindi la tua regola dovrebbe apparire come:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]

Il tuo caso è molto simile a l'esempio fornito per l'uso del flag QSA nel ricettario mod_rewrite .

Altri suggerimenti

La non fa parte del percorso URL e quindi non può essere elaborato con la direttiva RewriteRule . Questo può essere fatto solo con RewriteCond direttiva (vedi % {QUERY_STRING} ).

Ma come già detto da Chad Birch è sufficiente impostare la QSA flag per aggiungere automaticamente la query richiesta originale al nuovo URL.

Oltre a utilizzare il flag di riscrittura QSA, puoi anche utilizzare la variabile di ambiente QUERY_STRING come mostrato di seguito:

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}

E l'URL in questione

http://www.example.com/mark/friends?page=2

verrà riscritto in (come specificato):

http://www.example.com/friends.php?user=mark&page=2
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top