2015-05-25 43 views
5

tylko używam.htaccess umożliwić dostęp do index.php i katalogu

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

przekierować cały swój ruch w witrynie poprzez index.php i niech mój kod php uzyskać REQUEST_URI i droga każdy wniosek odpowiednio.

Chcę ograniczyć dostęp do wszystkich innych plików/katalogów z wyjątkiem jednego, który będzie zawierał pliki js, pliki CSS, obrazów itp

Okazało się, że do zrobienia, że ​​mogę używać:

Order deny,allow 
Deny from all 

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

, a następnie inny plik .htaccess w katalogu publicznym, aby zezwolić na określone typy plików.

Gdy przechodzę do localhost/mysite/index.php działa dobrze, ponieważ plik index.php jest dostępny.

Ale dla każdego innego adresu URL mam 403, na przykład/mysite/home/jest zabronione, mimo że oczekiwałem, że będzie działać normalnie.

Co mogę zrobić, aby uzyskać oczekiwane zachowanie?

Mój plik jest pełne .htacces:

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: /public/.htaccess aktualnie wygląda tak:

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

można pokazać '/ public/.htaccess' również? – anubhava

+0

@anubhava Zmontowałem to pytanie, aby uwzględnić to również. – ppp

Odpowiedz

5

Spróbuj kod w /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

Działa dobrze, gdy idę do localhost/mysite/index.php, ale wciąż dostaję zabronione, gdy idę do localhost/mysite/home /. Czy nie powinno być dozwolone, ponieważ jest przekierowywane do index.php? – ppp

+0

Myślałem, że chcesz zezwolić tylko na 'http: // example.com/public/*' i 'http: // example.com/index.php'. Czy tak nie jest? – anubhava

+0

Tak jest, ale chcę też mieć czyste adresy URL, więc adres URL 'localhost/mysite/home /' jest żądaniem 'index.php' z' $ _SERVER ['REQUEST_URI'] = "/mysite/home "'. Problem polega na tym, że mimo iż żądanie localhost/mysite/home/ma zostać wysłane do 'index.php', to jest zabronione przez' .htaccess' – ppp

1

Można użyć:

RewriteEngine on 

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

RewriteRule ^(.+)$ index.php 

To jest .htaccess używam dla moich aplikacji. W katalogu publicznym umieszczam tylko pliki index.php i JS, CSS oraz pliki obrazów, które są mi potrzebne, więc nie ma potrzeby ich filtrowania. Wszelkie inne pliki (takie jak przesłane) są zapisywane w folderze poza folderem publicznym - więc nie są dostępne bezpośrednio - tylko za pośrednictwem skryptu php, który je czyta. Uważam, że jest to "najlepsza praktyka".

+0

To byłaby moja ostatnia deska ratunku, ale naprawdę chcę znaleźć to, co jest nie tak z moim .htaccess i sprawić by działało z moją aktualną strukturą pliku – ppp

Powiązane problemy