2011-08-26 15 views
5

Non sono molto bravo con mod_rewrite ma ne ho davvero bisogno ora.RewriteRule reindirizza tutto tranne una cartella

Ho il nuovo sito Web intero in una cartella denominata site. Quindi, se devi visitare il nuovo sito web, l'URL sarà simile a http://domain.com/site/.... Ora devo escludere lo site dall'URL, ma lo indirizza ancora a /site/ ECCEZIONALE per una cartella denominata upload. Come posso fare questo?

Così http://domain.com/anything.ext e http://domain.com/anyfolder indicherebbe http://domain.com/site/... tranne domain.com/upload che punta ancora a domain.com/upload.

Poi un'altra domanda, si assume che questo è solo un bene per una soluzione temporanea o non importa davvero (pensando a velocità ed efficienza)?

risposta

7

(Supponendo che si sta mettendo le regole in un file .htaccess nella root del documento) Utilizzare questa:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^upload 
RewriteRule (.*) site/$1 [L] 

Se si sta mettendo in httpd.conf, è necessario cambiare leggermente:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/upload 
RewriteRule (.*) /site$1 [L] 

Riguardo alla seconda domanda, personalmente non mi piace il mod_rewrite e certamente non lo userei come soluzione permanente a meno che non sia assolutamente necessario. Questo perché mod_rewrite è piuttosto inefficiente, specialmente su server molto frequentati, perché deve eseguire almeno un'espressione regolare su ogni singola richiesta in entrata. È necessario utilizzare sempre il flag [L] per garantire che non vengano elaborate più regole del necessario.

È sempre più efficiente strutturare le directory nello stesso modo in cui l'applicazione fa riferimento ad esse. Quanto sopra dovrebbe farti lavorare, ma cerca di non lasciarlo sul posto troppo a lungo.

Sono sicuro che lo sai già, ma here è la documentazione di mod_rewrite.

+0

Quando lo uso (codice .htaccess) mostra un errore interno del server. Non sono riuscito a trovare ciò che è sbagliato. – Boyd

+0

Cosa dice il log di apache quando ricevi l'errore? ;-) – DaveRandom

+0

I miei clienti che ospitano la società sono un rompiballe. Non forniscono supporto per problemi di accesso e quindi non vogliono inviarmi alcun registro. Hanno affermato di non limitare le funzioni di accesso. Supponendo che il mio codice sia ok, dovrei semplicemente contattare la società di hosting o ci può essere un'altra causa dell'errore interno del server? (non dimenticare che mostra solo quando .htaccess contiene il codice dall'alto) – Boyd

Problemi correlati