2012-10-18 12 views
10

Sto tentando di impostare alcune riscritture del percorso su due server separati, uno con la riscrittura mod su Apache e uno con HttpRewriteModule su Nginx. Non penso che sto cercando di fare qualcosa di troppo complesso, ma le mie abilità regex sono un po 'carenti e potrei davvero usare un po' di aiuto.Riscrivere un URL su una stringa di query su Apache e Nginx

In particolare, sto cercando di trasformare un URL formattato in una stringa di query, in modo che un link formattato come questo:

http://www.server.com/location/ 

sarebbe puntare a questo:

http://www.server.com/subdirectory/index.php?content=location 

nulla in più a la fine dell'URL formattato deve essere aggiunta al parametro "content" nella stringa di query, quindi:

http://www.server.com/location/x/y/z 

dovrebbe puntare a questo:

http://www.server.com/subdirectory/index.php?content=location/x/y/z 

Sono abbastanza sicuro che questo dovrebbe essere possibile utilizzando sia Apache mod-rewrite e Nginx HttpRewriteModule basata sulla ricerca che ho fatto, ma non riesco a vedere per farlo funzionare . Se qualcuno potesse darmi alcuni suggerimenti su come mettere insieme le espressioni per uno o entrambi questi setup, lo apprezzerei molto. Grazie!

risposta

3

stringa di ricerca: (.+)/location/(.*)$

stringa di sostituzione: $1/subdirectory/index.php?content=location/$2

+0

Questo sarebbe prendere il nome del server nel primo gruppo, che non è necessario per una riscrittura. – JosefScript

3

Per Apache, nel file .htaccess nella root del documento, aggiungere:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/subdirectory/index\.php$ 
RewriteRule ^(.*)$ /subdirectory/index.php?content=$1 [L] 

In nginx, si vuole prima assicurarsi che richieste per /subdirectory/index.php passare attraverso, quindi riscrivere tutto il resto:

location ~ /subdirectory/index\.php$ 
{ 
} 

location/
{ 
    rewrite ^(.*)$ /subdirectory/index.php?content=$1 break; 
} 
+0

Non sono necessari due passaggi. Se rilevi "posizione" con la regex, le richieste dirette alla "sottodirectory" passeranno sempre. – JosefScript

5

In nginx si corrisponde "/ location" in una direttiva di riscrittura, si acquisisce la stringa di coda nella variabile $ 1 e la si aggiunge alla stringa di sostituzione.

server { 
... 
rewrite ^/location(.*)$ /subdirectory/index.php?content=location$1 break; 
... 
} 

In httpd.conf di Apache questo sembra abbastanza simile:

RewriteEngine On 
RewriteRule ^/location(.*)$ /subdirectory/index.php?content=location$1 [L] 

Date un'occhiata agli esempi alla fine di questa pagina: https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

Problemi correlati