2012-09-01 10 views
5

Stavo cercando di rimuovere le estensioni PHP dal mio sito web. Quando l'utente richiede un file PHP, il PHP verrà rimosso e l'utente verrà reindirizzato e quando l'utente digita un URL senza PHP, verrà pubblicato il file PHP effettivo. Questo ha funzionato bene tranne quando c'è un parametro GET nell'URL. Le mie regole sono le seguenti:Come utilizzare Apache Mod_rewrite per rimuovere l'estensione php, preservando i parametri GET?

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

# remove trailing slash ONLY if it is not an existing folder 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# rewrite to FILENAME.php if such file does exist and is not a folder 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ /$1.php [L,QSA] 

Ho pensato che questo dovrebbe già essere in grado di rimuovere php, anche quando non v'è alcun parametro GET, ma non è riuscito. Ho anche provato qualcosa di simile:

RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA] 

Inoltre non ha funzionato, il php è ancora lì. Ma se provo:

RewriteRule ^(.)\.php(.)$ $1$2 [R=301,L,QSA] 

cioè, la rimozione della RewriteCond, l'estensione PHP viene rimosso ed i parametri sono stati conservati, ma la pagina non sarà servita come browser dice che ci sono stati troppi reindirizzamenti.

Qualche idea per favore?

risposta

0

È possibile che si desideri utilizzare il parametro %{QUERY_STRING} documentato here.

Lettura utile here e here.

2

Grazie SteAp per la risposta. Mi è capitato di capire un modo per affrontarlo proprio ora, e vorrei condividere qui nel caso in cui altri incontrassero problemi simili.

Nelle mie regole, ho

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

Per eseguire reindirizzamento esterno quando l'utente richiede un file PHP. Il RewriteCond qui serve per prevenire loop di reindirizzamento - cioè, reindirizzamento infinito a causa di riscrittura interna errata e reindirizzamento esterno (rimozione php, quindi aggiunta di php, quindi rimozione di nuovo, ...)

Quando ci sono parametri, l'intestazione effettiva viene come http://domain.com/file.php? .... HTTP/1.1 Qualcosa come questo, quindi il pattern in RewriteCond non funzionerà poiché non ha tenuto conto dei parametri.

Per risolverlo, è sufficiente sostituire il codice precedente con:

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php(.*)\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

In questo modo, i parametri possono essere abbinate dal modello, e ora tutto funziona.

Spero che questo vi aiuterà qualcuno che ha problemi simili

+0

in RewriteRule (o è solo un noob come me lol?):/$ 1 Genera URL rotta, utilizzare $ 1 con fuori / – StefanoCudini

Problemi correlati