2012-01-10 16 views
12

Chcę zablokować dostęp do "sub/folder/index.php", ale nie "index.php" nigdzie indziej.. Htaccess deny plików w podfolderach

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

działa, ale blokuje wszystkie pliki "index.php".

<Files sub/folder/index.php> 
    Order allow,deny 
    Deny from all 
</Files> 

nie działa. Czy muszę używać <Directory>?

Nie chcę, aby utworzyć plik .htaccess w sub/folderu

nie mam dostępu do httpd.conf

nie chcę, aby zablokować wszystko w sub/katalogu

Gdyby to było takie proste, nie będę się pytać;)

Odpowiedz

23

myślę najprostszy zasada:

RedirectMatch 403 ^.*/sub/folder/index\.php$ 

RedirectMatch jest w module mod_alias, że na pewno mają. To nie implikuje silnika mod_rewrite. Tutaj po prostu mówimy apache, że jakikolwiek dostęp do sub/folder/index.php wygeneruje odpowiedź "403 zabronione".

Możesz umieścić to w pliku httpd.conf lub w katalogu głównym .htaccess (ale naprawdę rozważ usunięcie wszystkich .htaccess, jest złe, jest wolne, smutne, że nie masz dostępu do prawdziwych plików konfiguracyjnych).

+0

To działa! Podobno 'RedirectMatch' jest obsługiwany oddzielnie od' RewriteRule' – Halcyon

+0

Jeśli chcesz wyłączyć dostęp do każdego pliku w każdym podfolderze, wykonaj następujące czynności: RedirectMatch 403 ^. */*/* \. * $ –

+0

Miha, myślę, że najlepsza reguła dla wszystkie pliki będą po prostu/* $ na końcu, w ten sposób pliki, które nie mają kropek, będą miały również zastosowanie do tej reguły. – Arruda

1

Jak o stworzenie .htaccess plik w określonym folderze zawierającym pliki, które chcesz chronić?

Edit:

Bądź ostrożny, to faktycznie nie działa w prosty .htaccess pliku, patrz komentarze poniżej. Będzie działać tylko w pliku apache.conf.

Powinno się trick dla Ciebie bez innego pliku .htaccess:

<Directory sub/folder> 
    <Files index.php> 
    Order allow,deny 
    Deny from all 
    </Files> 
</Directory> 
+0

Nie chcę tego robić oczywiście z przyczyn, które nie wchodzą w zakres tego pytania. – Halcyon

+1

Następnie tak, musisz zastosować zasady directoy. Będę edytować odpowiedź :) – bardiir

+2

Och, właśnie natknąłem się, że to działa tylko w plikach apache.conf, a nie plikach .htaccess ... zobacz http://httpd.apache.org/docs/1.3/howto/ htaccess.html – bardiir

2

I spróbuj utworzyć kolejną .htaccess w tym sub/folderu/zablokować dostęp do tego pliku index.php.

"Jeśli umieścisz plik .htaccess w podfolderze, jego dyrektywy zastąpią te, które masz w głównym folderze witryny."

Ta strona ma Dalsze informacje: http://www.besthostratings.com/articles/htaccess.html

+2

Łączony artykuł jest użyteczny, jeśli po raz pierwszy usłyszałeś o koncepcji plików '.htacess'. Nie tak przydatne tutaj. – Halcyon

+0

Twoje pytanie w tym czasie nie mówiło, czy masz nowe możliwości, jakie miałeś z htaccess, dlatego dałem ci taki link. – AKFourSeven

0

Można używać tylko nazwy plików w < Files> sekcjach, a nie ścieżki.

Są trzy opcje, które mogę zobaczyć;

  • Umieść plik .htaccess w tym samym folderze co plik.
  • Umieść konfigurację w pliku apache.conf, używając dyrektywy Katalog> Dyrektywa i < Pliki> Dyrektywa. < Katalog> nie działa w plikach .htaccess, tylko apache.conf
  • Utwórz regułę przepisywania za pomocą mod_rewrite a'la;

-

RewriteEngine on 
RewriteRule ^sub/folder/index.php$ http://yoursite/index.locked 

da 404 na plik, jeśli chcesz odmówiono zezwolenia, tworzyć odczytu pliku chronionego w szpiczaste na miejscu.

+0

Drugi jest również niezawodny;) – Halcyon

+1

OK, dodałem trzecią :) –

+0

Grałem z tym i to by działało, tylko podkatalog zawiera plik .htaccess oraz RewrieRules. Tak więc potrzebowałbym opcji 'RewriteOptions inherit' oraz' Redlicy "RewriteBase' w jednostce nadrzędnej, ale nie mogę jej dostarczyć, ponieważ moje środowisko jest dynamiczne. Zawsze uważam za niesamowite, jak całkowicie bezużyteczny .htaccess jest, gdy masz modułowe struktury. – Halcyon

Powiązane problemy