Основні налаштування в .htaccess
Що і як можна налаштувати в .htaccess Працює тільки на сервері Apache and Nginx, з увімкнутеим модулем – Mod-Rewrite.
Задаємо кодування
AddDefaultCharset UTF-8
Як коментувати в .htaccess?
Для коментаря потрбно ставити решітку:
#тут ваш коментар
RewriteRule (.+)/$ $1
або так
RewriteRule (.+)/$ $1 #тут ваш комментар
Власні сторінки помилок:
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
Забороняємо перегляд Змісту папки:
#Забороняємо перегляд змісту папки
Options All —Indexes
Заборона на перегляд окремих файлів:
Директива Order, разом з директивою Allow та Deny має трьох-крокову систему контроля доступу.
- Перший крок обробляє або усі директиви Allow, або усі директиви Deny.
- Другий крок обробляє залишившуся директиву (Deny або Allow).
- Третій крой приймає усі запити, які не відповідают ні першій, ні другій.
Order allow,deny #метод провірки - спочатку дозволені - потім заборонені
Deny from all #Забороняємо все
<FilesMatch "\.(woff)$|^$"> #Виняток для файлів .woff:
Order deny,allow #метод провірки - спочатку заборонені - потім дозволені
Allow from all # дозволено
</FilesMatch>
# Захист від міжсайтових сценаріїв (XSS), фреймування сторінок і перехоплення вмісту.
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
</IfModule>
Як створити чорний список IP:
#Чорний список IP адресів
allow from all
deny from 145.186.14.122
deny from 124.15.
Найбільш популярні редиректи:
#301 редірект з www на без www
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
#301 редірект з index.html на головну сторінку
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ https://ardilla-cms.top/ [R=301,L]
#Редірект 301 сторінки з .html на сорінки без .html
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
#Перенаправляємо сторінки з http:// на https://
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Старый способ разрешить и запретить просмотр:
Deny from all
* Еще есть поддержка по состоянию на 2022 год
НОВЫЙ способ запрета и разрешений создается с помощью нового модуля Апаче и дерективы Require - mod_authz_core
Также по использованию Require - хорошая статья
#Пример РАЗРЕШЕНИЯ доступа всем без ограничений, что аналогично устаревшей Allow from all
Require all granted
#Пример ЗАПРЕЩЕНИЯ доступа всем, что аналогично устаревшей Deny from all
Require all denied
# Доступа на основе ЛОГИЧЕСКОГО выражения. Здесь, доступ разрешается для всех клиентов, у которых значение USER_AGENT не содержит фразу 'BadBot':
Require expr %{HTTP_USER_AGENT} != 'BadBot'
# Синтаксис примера <RequireAll> директивы-тега. Эта групповая директива требует, что бы все, заключенные внутри нее, директивы Require были исполнены, и только в этом случае <RequireAll> исполниться, и доступ будет предоставлен. В приведенном примере клиентам, приходящим с IP 192.168.48.185 или с домена host.example.com, доступ будет запрещен, а всем остальным доступ будет разрешен.
<RequireAll>
Require all granted
Require not ip 192.168.48.185
Require not host host.example.com
</RequireAll>
# Синтаксис примера <RequireAny> директивы-тега. Эта групповая директива требует, что бы хотя бы одна из заключенных внутри нее директив Require была исполнена, только в этом случае <RequireAny> исполниться и доступ будет предоставлен. Поэтому внутри <RequireAny>, все последующие директивы Require, следующие после первой исполненной, уже игнорируются. В данном примере доступ будет предоставлен только клиентам, выполнившим запрос методом GET или POST, или только клиентам, прошедшим авторизацию по пользователю и паролю методом заданным директивой AuthType.
<RequireAny>
Require method GET POST
Require valid-user
</RequireAny>
Значение символов в .htaccess?
. — точка означает любой символ;
[abc] — перечень символов, совпадающих с буквами a, b, или с;
[^abc] — перечень символов, что не входят в диапазон. Условию соответствует любой символ, кроме a, b, с;
* — предыдущий символ может повторяться 0 и более раз;
[abc]* — найти символы из заданного набора, идущие подряд;
[^abc]* — обратная операция;
.* — замена любого набора символов;
".*" — найти все подстроки между кавычками;
^ — обозначает начало строки (при использовании в начале выражения);
$ — конец строки;
\w — буква, цифра или подчёркивание _;
\d — любая цифра;
\D — любой символ, кроме цифр;
[0-9] — указание на любую цифру;
[a-z] — указание на любую букву от a до z с нижним регистром;
[A-Z] — указание на любую букву от A до Z с верхним регистром;
[a-zA-Z] — любая буква от a до Z, регистр не важен;
[a-Z] — то же самое, только короче.
Флаги для доп. опций
NC — NoCase отключает проверку регистра символов при срабатывании правила.
R — Redirect останавливает изменение URL-адреса и возвращает результат.
L — Last останавливает создание URL-адреса, и строка считается окончательной.
Спецсимволы:
^ - ограничение слева (начало строки);
$ - ограничение справа (конец строки);
. - Точка это любой символ;
() - переменная (группировка);
\ - экранирование (символ после \ считается обычным, а не спецсимволом);
[] - диапазон значений;
[abc] — перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, не входящих в диапазон. Условию соответствует любой символ, кроме a, b, с.
* — предыдущий символ может повторяться 0 и более раз.
[abc]* — найти символы из заданного набора идущие подряд.
[^abc]* — обратная операция.
\w — буква, цифра или подчёркивание _.
\d — любая цифра.
\D — любой символ, кроме цифр.
[0-9] — указание на любую цифру.
[a-z] — указание на любую букву от a до z с нижним регистром.
[A-Z] — указание на любую букву от A до Z с верхним регистром.
[a-zA-Z] — любая буква от a до Z, регистр не важен.
[a-Z] — тоже самое, только короче.
! - специальный символ отрицания;
Модификаторы:
? - символ повторяется 0 или 1 раз;
+ - 1 и более символов (до 65536);
* - предыдущий символ может повторяться 0 и более символов (до 65536);
Флаги для дополнительных опций в правиле
Флаги нужно перечислять только в квадратных скобках через запятую, примеры: [NC] или [R=301,L].
NC — NoCase отключает проверку регистра символов при срабатывании правила.
R — Redirect останавливает изменение URL-адреса и возвращает результат. Самое популярное значение R=301, однако встречаются и другие для временных редиректов (302, MOVED TEMPORARY).
L — Last останавливает создание URL-адреса и строка считается окончательной.
Як заборонити Вебархіву архівувати (сканувати) мій сайт?
User-agent: ia_archiver
Disallow: /
User-agent: ia_archiver-web.archive.org
Disallow: /
Як заборонити іншим сайтам вставляти картинки із вашого сайту?
# Заборонити іншим сайтам використовувати прямі посилання на ваші зображення
RewriteCond %{HTTP_REFERER} !^$
# Далі список дозволених доменів
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?sitename.ua.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?sitename.ua:80.*$ [NC]
# IP сайта (домена)
RewriteCond %{HTTP_REFERER} !^http(s)?://111.111.111.111.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://111.111.111.111:80.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex.ru [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google. [NC]
# RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?домен_дружнього сайту.ua [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
# Формати файлів, для яких встановлюється захист
# Виводить помилку 403
# RewriteRule \.(jpe?g|bmp|gif|png|css|mov|swf|dcr|exe|rar|avi|vob|zip|pdf|txt|doc|flv|mp3|mp4)$ — [NC,F,L]
# або показує спецмалюнок замість зазначеного
RewriteRule .*\.(jpe?g|bmp|gif|png)$ files/images/nohotlink.jpg [NC,L]
RewriteCond обозначаем условие, при совпадении с которым будет выполнено правило RewriteRule. С помощью регулярных выражений задаются шаблоны строк.
Переменные сервера:%{REQUEST_URI} — часть урла без доменного имени и GET-параметров, например, для страницы, которую вы сейчас читаете: blog/post/4393,
%{HTTP_HOST} — хост или доменное имя, например: alaev.info
%{QUERY_STRING} — строка с набором GET параметров, то есть часть урла после знака вопроса (и до решётки якоря, если он есть).
%{REQUEST_FILENAME} — полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу. Чтобы было понятно, адрес скрипта, как нам это привычно такой — alaev.info/index.php, а вот в файловой системе сервера это страшная строка /var/www/alaev_info/data/www/alaev.info/index.php.
Бывает, делая редирект, вы получаете неожиданный результат, например, хотели в адресе http://site.ru/page-name?post=17434801_4060 убрать параметры post=17434801_4060, указали соответствующие правила (о них ниже будет написано), а в итоге получили строку http://site.ru/usr/local/www/site.ru/www/page-name — от параметров избавились, но получили странный адрес. Это все потому, что вы не указали в начале файла после RewriteEngine On директиву RewriteBase /, которая устанавливает конкретный, базовый URL для преобразований в контексте каталога.
Метасимволы используются для задания групп символов или «меток» в шаблоне:^ — метка начала строки,
$ — метка конца строки,
! – отрицание,
\ — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
. – точка, обозначает любой символ, но только один,
() – группировка.
Модификаторы ставятся после обычных символов, метасимволов или их групп и расширяют возможности использования шаблонов:? — символ повторяется 0 или 1 раз,
* — Повторяется от 0 до 65536 раз,
+ — Повторяется от 1 до 65536 раз.
Флаги определяют дополнительные опции для данного правила и перечисляются в квадратных скобках через запятую:NC — (nocase) отключает проверку регистра символов.
R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY). Как вы понимаете, это то самое, что нам и надо.
L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.
Більше прикладів редіректів - дивитись тут