2014-09-21 19 views
6

Desidero utilizzare un file .htaccess per verificare se il percorso richiesto è un file nella directory public/. Se sì, servirlo, altrimenti inoltrare richiesta a /index.php. Non riesco a farlo funzionare..htaccess: Servire file statici, instradare tutto il resto su index.php

Ecco quello che ho:

Options +FollowSymLinks 
RewriteEngine on 

Options -Indexes 

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f 
RewriteRule^%{DOCUMENT_ROOT}/public%{REQUEST_URI} [L] 

RewriteRule^index.php [QSA,L] 

esempio http://example.com/css/style.css dovrebbe avere Apache servire /public/css/style.css perché è un file che esiste, madeve essere inviato a /index.php.

risposta

1

Apparentemente [L] does not work as I expected. Con questo in mente, e un sacco di tentativi ed errori, sono riuscito a trovare qualcosa che funziona:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f 
RewriteRule^public%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_URI} !^/public/ 
RewriteRule^index.php [QSA,L] 
6

Questo codice dovrebbe funzionare come previsto dalla vostra parte

Options +FollowSymLinks -MultiViews -Indexes 

RewriteEngine On 
RewriteBase/

RewriteCond %{DOCUMENT_ROOT}/public/$1 -f 
RewriteRule ^(.*)$ public/$1 [L] 

RewriteCond %{THE_REQUEST} \s/public/ [NC,OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L,QSA] 
+0

che funziona! Grazie. Ho notato però che 'style.css' è disponibile in * both *'/css/style.css' * e * '/ public/css/style.css'. Tecnicamente quest'ultimo dovrebbe essere indirizzato a 'index.php' dato che'/public/public/css.style.css' non è un file. Ciò significa anche che '/ public/xxx' genererà un apache 404 invece di quello personalizzato che ho configurato nel mio file' index.php'. Non c'è modo di aggiustarlo, c'è? – mpen

+1

Ho modificato la mia risposta per prendere in considerazione il tuo commento –

+1

La tua magia è mia cara. Mi hai salvato. molte grazie –

Problemi correlati