Добрый, коллеги!
Решили прикрыть определенные скрытые файлы разрабов которые могут, но не должны быть доступны извне. Но хочется закрыть доступ не ко всем .* файлам, а по определенному паттерну:
- Блокировать все директории популярных SCM (.git/ .hg/ .svn/ .bzr/ .cvs/)
- Блокировать файлы популярных SCM (.gitignore .hgignore, что-то еще?)
- Блокировать ht-файлы (.htaccess .htpasswd)
- Блокировать любые файлы с разрешениями *.sql и *.sql.* (например, file.sql.gz)
Сейчас использую такие правила:
Apache2:
# Deny access to SQL and SCM dot-files:
# .hgignore .gitignore .htaccess .htpasswd *.sql *.sql.*
<FilesMatch "\.(hgignore|gitignore|ht(access|passwd))\Z|.*\.sql\Z|.*\.sql\..+\Z">
deny from all
</FilesMatch>
# Deny access to SCM dot-directories:
# .git .hg .svn .bzr .cvs
<DirectoryMatch "\.(git|hg|svn|bzr|cvs)(/)?\Z">
deny from all
</DirectoryMatch>
Nginx:
# Deny access to SQL and SCM dot-files:
# .gitignore .hgignore .htaccess .htpasswd *.sql *.sql.*
location ~* (\.(hgignore|gitignore|ht(access|passwd))$|(\.sql)$|(\.sql\..+)$)
{
deny all;
}
# Deny access to SCM dot-directories:
# .git .hg .svn .bzr .cvs
location ~* \.(git|hg|svn|bzr|cvs)[/]?.*$
{
deny all;
}
Основной вопрос: Как правильно это сделать? Сейчас сталкиваюсь с тем что с разными CMS и настройками веб-срверов иногда по разному работают.
- Какие директивы и в каком месте (начало или конец конфига) лучше использовать, и почему?
- Что лучше использовать (и надо ли) для обозначения начала и конца URL-запроса? На разных конфигурациях ^, $ и \Z по разному себя вели.
- Как правильнее указать опциональный слеш в конце имен директорий, и надо ли вообще его указывать - (/)? или [/]? ?
Извиняюсь, ни в регулярках, ни в настройках apache\nginx экспертом не являюсь. Доки читал, но но хочу услышать мнение коллег. Спасибо!