2009-03-30 19 views
12

Ho usato semplici regole mod_rewrite per il mio CMS per anni e ora sto facendo una nuova versione, vedo che la riscritturaCond non ha senso- Ho lo standard "se non è un file "ma vedo ancora i rewriter in corso di valutazione anche se non dovrebbero. Il mio codice riscrittura:.htaccess! -f la regola non funziona

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ index.php?page=$1 
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2 

che carico/page/var e funziona bene come index.php page = Pagina & var = var, ma cerco di caricare /css/file.css e carica index?. php? page = css & var = file.css anche se /css/file.css è un file, quindi l'intera sezione di riscrittura non dovrebbe nemmeno essere valutata.

Non ho mai visto htaccess sfidare apparentemente la sua logica, qualcuno può aiutarmi a capirlo? Qualcuno ha mai incontrato qualcosa di simile?

risposta

3

Bene, questo dovrebbe funzionare.

impostando i seguenti oggetti di scena nel vostro .htaccess Prova:

RewriteLog /var/log/rewrite.log 
RewriteLogLevel 3 

per eseguire il debug richieste. Ricorda di ripristinare questo valore una volta che hai finito, altrimenti ti ritroverai con un hard disk pieno.

+0

+1 per la roba RewriteLog, mi ha aiutato a eseguire il debug delle mie regole di riscrittura. –

25

Gli RewriteCondition si applicano solo alla regola successiva. Si desidera che questo:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ index.php?page=$1 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2 
+2

È grandioso, dopo tutti questi anni facendo mod_rewrites come questo si scopre che la mia logica ha funzionato per caso ... grazie mille –

+0

fantastico, grazie !! .. è anche bene tenere a mente che se il file non esiste , NON sarà 404, passerà semplicemente alla regola successiva. – Roberto

+0

@Colin - i miei sentimenti esattamente. Ora devo capire se è un sollievo o una preoccupazione ... – Ben

13

Se si utilizza Apache 2.2, allora dovete leggere questo:

http://amandine.aupetit.info/135/apache2-mod_rewrite/

Spoiler: ciò che sarà necessario scrivere in realtà è:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-l   

Merc.

+0

Aggiunta del problema risolto '% {DOCUMENT_ROOT}. – hlcs

+1

L'ho cercato per così tanto tempo, ho completamente risolto il mio problema (non sto usando vhost, ma container). Grazie! – Gildas

+0

Dato che il richiedente non accetterà una risposta, sarebbe bello se la mia risposta avesse ottenuto il massimo dai voti più alti ... – Merc

Problemi correlati