2012-10-21 12 views
9

Ho cercato questa domanda ma ho trovato risposte davvero specifiche che sembrano difficili da adattare alle mie esigenze specifiche..htaccess riscrivi la stringa di query come percorso

Diciamo che l'URL Sto tentando di riscrivere è questo:

http://www.example.org/test.php?whatever=something 

Voglio riscrivere in modo che appaia come questo:

http://www.example.org/test/something 

Come posso fare questo?

+2

Ecco alcuni esempi: https://wiki.apache.org/httpd/RewriteQueryString –

risposta

19

Per instradare una richiesta come /test/something internamente riscrivere in modo che il contenuto in /test.php?whatever=something viene servito, è necessario utilizzare queste regole nel file .htaccess nella root del documento:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?test/(.*?)/?$ /test.php?whatever=$1 [L] 

E al fine di reindirizzare la stringa URL query al più bello che cercano uno:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php\?whatever=([^\&\ ]+) 
RewriteRule ^/?test\.php$ /test/%1? [L,R=301] 
+0

Assolutamente perfetto, grazie! – UserIsCorrupt

+0

Se utilizzando il codice precedente se qualcuno ha problemi con la stringa di query finale, è sufficiente aggiungere il punto interrogativo finale alla fine dell'ultima regola, ecco un codice aggiornato 'RewriteCond% {THE_REQUEST}^[AZ] {3, 9} \ /test\.php\?whatever = ([^ \ & \] +) RewriteRule^/? Test \ .php $/test /% 1? [L, R = 301] ' –

+0

ho usato le stesse regole ma non funziona il mio url è http://example.com/directory1/directory2/login.php?id=8 e voglio farlo come http: //example.com/directory1/directory2/login/8 ti prego, dimmi come risolverlo –

Problemi correlati