2012-07-23 14 views
5

Ho un problema strano con una condizione/regola mod_rewrite.mod_rewrite non carica file css e js

Questa è la condizione e la regola che sto utilizzando.

RewriteEngine On 

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

RewriteRule ^(.*)$ index.php?params=$1 [QSA,L] 

Il mio problema è se mi visitare www.example.com e www.example.com/page carica benissimo ma quando provo a caricare www.example.com/page/category carica la pagina, ma non ci riesco trova il css e javascript. Prova a caricarli da page/css anziché dalla directory /.

Qualche idea su cosa ho fatto di sbagliato? Ho avuto una ricerca su qui e provato un paio di cose come aggiungere

RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf|mp3|wav|txt)$ 

e

RewriteRule ^(images|css|javascript)(.*)$ index.php?params=$1 [QSA,L] 

Ma che non sembrano fare molta differenza.

Grazie per la lettura

risposta

2

Il problema è che una riscrittura in silenzio, non vi dirà browser del visitatore che essi sono in realtà guardando una pagina da un diverso percorso di directory.

Quindi una richiesta per/pagina lascia il browser (correttamente) pensando che stia guardando una risorsa che si trova nella directory pubblica di primo livello sul server Web, così come le immagini e i file CSS.

Ma una richiesta per/page/category lascia il browser (erroneamente) pensando che stia guardando una risorsa che si trova in una sottodirectory chiamata page. Quindi, quando il browser invia richieste per i file CSS e immagine, chiederà al server di cercarli nella directory/page/sottodirectory, che in realtà non esiste. Quindi il server restituisce 404 codici quando il browser tenta di recuperare immagini e file CSS.

Un modo per aggirare questo è quello di cambiare i percorsi a CSS, immagini e altre risorse referenziate a percorsi assoluti. Iniziare con una barra di avanzamento in modo che siano ancorati rispetto alla directory pubblica effettiva di livello superiore. Questo è probabilmente il modo migliore di procedere se si ha solo un piccolo numero di percorsi di risorse da aggiornare. Ad esempio, modificare:

src="image-name.png" 

in

src="/image-name.png" 

Questo costringerà il browser per richiedere il file utilizzando un percorso assoluto invece di dedurre la posizione sbagliata sulla base di un percorso relativo.

Per rimuovere la necessità di un RewriteCond, è possibile modificare la RewriteRule al seguente:

RewriteRule ^([a-z]+(?:/[a-z]+)*)$ index.php?params=$1 [QSA,L] 

questo non sarà mai soddisfatta che contiene un punto (dot) simbolo, quindi le richieste di file di immagini e CSS essere saltato

1

Hai considerato l'utilizzo del base element e la rimozione di "/" prima delle immagini?