2015-05-25 10 views
5

Sto usando.htaccess consentono solo l'accesso a index.php e una directory

RewriteEngine On 
RewriteRule ^.*$ ./index.php 

per reindirizzare tutto il mio traffico sito web attraverso index.php e lasciare che il mio codice php ottenere il REQUEST_URI e percorso ogni richiesta di conseguenza.

voglio limitare l'accesso a tutti gli altri file/directory, tranne uno che conterrà i file js, css file, immagini ecc

ho scoperto che per fare che posso usare:

Order deny,allow 
Deny from all 

<Files index.php> 
    Order Allow,Deny 
    Allow from all 
</Files> 

e poi avere un altro file .htaccess all'interno della directory pubblica per consentire determinati tipi di file.

Quando si naviga in localhost/mysite/index.php funziona bene poiché il file index.php è accessibile.

Ma per qualsiasi altro URL ottengo un 403, ad esempio/mysite/home/è vietato anche se mi aspettavo che funzionasse normalmente.

Cosa posso ottenere per ottenere il comportamento previsto?

Il mio file Htacces completo è:

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^.*$ ./index.php 


Order deny,allow 
Deny from all 

<Files index.php> 
    Order Allow,Deny 
    Allow from all 
</Files> 

EDIT: Il /public/.htaccess attualmente si presenta così:

<Files ~ "\.(xml|css|jpe?g|png|gif|js|pdf)$"> 
    Allow from all 
</Files> 
+0

si può mostrare '/ public/.htaccess' anche? – anubhava

+0

@anubhava Ho modificato la domanda per includere anche quella. – ppp

risposta

5

provare questo codice in /mysite/.htaccess:

DirectoryIndex index.php 
RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule^index.php [L] 

RewriteRule !^(public/|index\.php) [NC,F] 
+0

Funziona bene quando vado a localhost/mysite/index.php, ma continuo a ricevere un divieto quando vado a localhost/mysite/home /. Non dovrebbe essere permesso dal suo reindirizzamento a index.php? – ppp

+0

Ho pensato di voler consentire solo 'http: // example.com/public/*' e 'http: // example.com/index.php'. Non è questo il caso? – anubhava

+0

Questo è il caso, ma voglio anche essere in grado di avere url puliti, quindi essenzialmente url 'localhost/mysite/home /' è una richiesta a 'index.php' con' $ _SERVER ['REQUEST_URI'] = "/mysite/home "'. Il problema è che anche se la richiesta di localhost/mysite/home/deve essere inviata a 'index.php', è vietata dal' .htaccess' – ppp

1

È possibile utilizzare:

RewriteEngine on 

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

RewriteRule ^(.+)$ index.php 

Questo è il .htaccess che uso per le mie applicazioni. Nella directory pubblica, inserisco solo index.php e JS, CSS e file di immagini di cui ho bisogno, quindi non è necessario filtrarli. Qualsiasi altro file (come i caricamenti), viene salvato in una cartella esterna alla cartella pubblica, quindi non è accessibile direttamente - solo tramite uno script php che li legge. Credo che sia "la migliore pratica".

+0

Questa sarebbe la mia ultima risorsa, ma voglio davvero scoprire cosa c'è di sbagliato nel mio .htaccess e farlo funzionare con la mia attuale struttura di file – ppp