Конфигурация Apache: Regex для отключения доступа к файлам / каталогам, начинающимся с точки - PullRequest
23 голосов
/ 04 декабря 2010

Я хочу отключить доступ к любому файлу ИЛИ каталогу, имя которого начинается с точки.Я придумал следующее, но он отключает доступ к файлам / каталогам, начинающимся с DOT, только если они находятся непосредственно в корне документа.

<Files ~ "^\.|\/\.">
    Order allow,deny
    Deny from all
</Files>

При этом

http://my_server.com/.svn/entries   --> Permission denied
http://my_server.com/abcd/.svn/entries  --> Accessible, should be disabled

Чтоправильное регулярное выражение для достижения этой цели?

Спасибо,

JP

Ответы [ 4 ]

52 голосов
/ 04 декабря 2010

Ваш код не работает, поскольку <Files> применяется только к базовому имени запрошенного документа. То есть часть после последней косой черты. (источник: http://httpd.apache.org/docs/current/mod/core.html#files)

Apache блокирует .htaccess файлы при установке по умолчанию (лучше: все файлы, начинающиеся с .ht). Если вы внимательно посмотрите на файлы конфигурации, вы увидите что-то вроде этого:

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
</FilesMatch>

Чтобы скрыть все файлы, начинающиеся с точки, вы должны использовать:

<FilesMatch "^\.">
    Order allow,deny
    Deny from all
</FilesMatch>

Чтобы заставить его работать для каталогов, начинающихся с точки, используйте следующий (проверенный) код:

<DirectoryMatch "^\.|\/\.">
    Order allow,deny
    Deny from all
</DirectoryMatch>
17 голосов
/ 24 мая 2013
RewriteRule (^\.|/\.) - [F]

Это запретит просмотр любых файлов или каталогов, начинающихся с точки.Он влияет на любой уровень в дереве путей.

Модификатор [F] в конце говорит о запрете доступа (нет необходимости в модификаторе L, чтобы сказать, что это последнее правило, которое нужно применить, оно подразумевается по умолчанию).

Регулярное выражение состоит из двух частей (любая из них может совпадать, но не обязательно обе):

(part1|part2)

Первая часть соответствует всему, что начинается с точки (для случая, когда выиспользуйте его в каждом каталоге .htaccess, и в начале строки, с которой мы сопоставляемся, не будет косой черты):

^\.

Например, это будет работать для .test, .git/HEAD, ноне будет работать для /.git, path/.hidden.

Вторая часть соответствует всему, что содержит косую черту, за которой следует точка.Это полезно, если у вас есть это правило в VirtualHost или в боковой конфигурации Apache, в которой строка соответствия, которую мы сопоставляем, может начинаться с косой черты.

Это правило будет соответствовать: /.git, some/.hidden Это правилоне будет соответствовать: .git, .hidden

Когда мы объединяем оба эти правила, кажется, что мы покрываем все возможные случаи.

3 голосов
/ 16 июля 2017

Это прекрасно работает для меня (Apache 2.4):

<LocationMatch "\/\.">
    Require all denied
</LocationMatch>

Запрещает любой URL-адрес, содержащий компонент, начинающийся с точки (файл или каталог).

1 голос
/ 29 октября 2013

с модом перезаписи:

RewriteEngine on

RewriteCond %{THE_REQUEST} ^.*/\.
RewriteRule ^(.*)$ - [R=404]

Каждый файл или каталог, начинающийся с точки, будет перенаправлен на 404.

/myDir/.svn => 404
/.gitignore => 404
/dir1/dir2/dir3/..../.toHide => 404
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...