Директивы .htaccess
Справочник директив, реально употребимых в .htaccess: что делает каждая, синтаксис, короткий пример. Сгруппировано по модулям.
Не уверены, какие включить — соберите .htaccess чекбоксами в генераторе или возьмите готовый блок в рецептах; проверить файл — линтер /check/; как работает mod_rewrite — туториал; разобрать конкретный файл построчно — объяснялка; перевести старый синтаксис контроля доступа на Apache 2.4 — конвертер; не знаете термин — глоссарий .htaccess. Часть директив в .htaccess доступна, только если хостинг разрешил это в AllowOverride — иначе будет ошибка 500.
core — ядро Apache
Базовые директивы ядра, влияющие на поведение каталога.
ErrorDocument— что отдавать при ошибке с указанным HTTP-кодом: путь к файлу на сайте, полный URL или текст-сообщение в кавычках. Синтаксис:ErrorDocument <код> <путь|URL|"текст">. Пример:ErrorDocument 404 /404.html. (В Apache 2.4 текст-сообщение обязан быть в парных кавычках; полный внешний URL превращает ответ в редирект.)Options— фичи каталога:Indexes(автолистинг),FollowSymLinks/SymLinksIfOwnerMatch,MultiViews,ExecCGI,Includes/IncludesNOEXEC.+/-добавляют/убирают; голое имя задаёт набор целиком. Синтаксис:Options [+|-]<опция> …. Пример:Options -Indexes +FollowSymLinks. (Если хостинг не разрешилOptionsчерезAllowOverride Options— будет ошибка 500.)FileETag— из чего формировать заголовокETag:INode,MTime,Size,All,None. Синтаксис:FileETag <компоненты>. Пример:FileETag MTime Size/FileETag None(отключить ETag).AddDefaultCharset— добавлятьcharset=вContent-Typeдляtext/plainиtext/html, если не указан. Синтаксис:AddDefaultCharset <кодировка|Off>. Пример:AddDefaultCharset UTF-8.ServerSignature— выводить ли строку с версией сервера на серверных страницах (ошибки, листинг). Синтаксис:ServerSignature On|Off|EMail. Пример:ServerSignature Off.AcceptPathInfo— принимать ли «лишний» путь после имени файла (/script.php/extra). Синтаксис:AcceptPathInfo On|Off|Default. Пример:AcceptPathInfo Off.LimitRequestBody— максимальный размер тела запроса (загрузки файлов) в байтах;0— без лимита. Синтаксис:LimitRequestBody <байты>. Пример:LimitRequestBody 10485760(10 МБ).ForceType— принудительно задатьContent-Typeвсем файлам в каталоге/секции. Синтаксис:ForceType <mime-тип|None>. Пример:ForceType application/octet-stream(внутри<FilesMatch>— заставить браузер скачивать).SetHandler— назначить обработчик всем совпавшим файлам/URL. Синтаксис:SetHandler <обработчик|None>. Пример:<Files "server-status"> SetHandler server-status </Files>.ContentDigest— добавлять заголовокContent-MD5. Синтаксис:ContentDigest On|Off. Пример:ContentDigest Off. (Используется редко, заметно нагружает сервер.)
В .htaccess нельзя: <Directory>, <DirectoryMatch>, <Location>, <LocationMatch>, <VirtualHost>, <Proxy>, ServerName, DocumentRoot, Listen, LoadModule — только в конфиге сервера/vhost.
Что делать, если .htaccess уже выдал 500 (и как понять, какая директива виновата), — гид «Почему .htaccess не работает».
mod_rewrite — переписывание URL
Гибкая трансформация URL «на лету» (ЧПУ, редиректы, склейка зеркал, блокировки). Полный разбор синтаксиса и поведения — в туториале «Как работает mod_rewrite»; синтаксис регулярных выражений в паттернах — справочник «PCRE для mod_rewrite»; здесь — краткая справка.
RewriteEngine— включить/выключить обработку rewrite-правил. Синтаксис:RewriteEngine On|Off. Пример:RewriteEngine On. (БезOnвсеRewriteRule/RewriteCondигнорируются.)RewriteBase— URL-префикс для относительных подстановок в.htaccessподкаталога. Синтаксис:RewriteBase <URL-путь>. Пример:RewriteBase /app/. (Не нужна в корневом.htaccessи при абсолютных подстановках.)RewriteCond— условие, проверяемое перед ближайшим следующимRewriteRule. Синтаксис:RewriteCond <ТестоваяСтрока> <ШаблонУсловия> [флаги]. Пример:RewriteCond %{REQUEST_FILENAME} !-f. (Несколько подряд — логическое И; флаг[OR]— ИЛИ со следующим.)RewriteRule— правило переписывания. Синтаксис:RewriteRule <Паттерн> <Подстановка> [Флаги]. Пример:RewriteRule ^old-page$ /new-page [R=301,L].RewriteOptions— опции движка для контекста:Inherit(наследовать правила родителя),InheritDown/InheritDownBefore(передать свои правила вниз),AllowNoSlash,IgnoreInherit. Синтаксис:RewriteOptions <опция> …. Пример:RewriteOptions Inherit.
В .htaccess нельзя: RewriteMap — только в конфиге сервера/vhost.
Частые флаги RewriteRule (и RewriteCond):
L— стоп обработки правил в этом проходе. (В.htaccessApache 2.4 после перезаписи перезапускает набор правил с начала — для окончательного «стоп» используйтеEND.)END— окончательно остановить обработку, набор не перезапускать (Apache 2.4+).R=код— внешний редирект; без значения — 302; для постоянного —R=301.NC— без учёта регистра.QSA— присоединить исходную строку запроса к новой;QSD— отбросить строку запроса (2.4+).F— вернуть403 Forbidden;G— вернуть410 Gone(подстановку обычно пишут-).C/chain— следующее правило выполнится, только если это сработало.S=N/skip=N— при срабатывании пропустить N следующих правил.NE— не URL-кодировать спецсимволы в подстановке.E=ИМЯ:ЗНАЧЕНИЕ— выставить переменную окружения.[OR](толькоRewriteCond) — ИЛИ-связь со следующим условием.- (прочие —
N,P,NS,T=,B,DPI,PT,H=— реже; см. туториал.)
Частые переменные %{…}:
HTTP_HOST/SERVER_NAME— хост из запроса (example.com).HTTPS—on, если запрос по HTTPS, иначеoff(за прокси/CDN может быть всегдаoff— смотрите%{HTTP:X-Forwarded-Proto}).REQUEST_SCHEME—http/https.SERVER_PORT— порт.REQUEST_URI— путь запроса (/blog/5), без строки запроса; меняется при внутренней перезаписи.QUERY_STRING— то, что после?(без?).REQUEST_METHOD—GET/POST/HEAD/ …REQUEST_FILENAME/SCRIPT_FILENAME— полный путь к файлу на диске для этого запроса (используется в проверках-f/-d).DOCUMENT_ROOT— корневой каталог сайта на диске.THE_REQUEST— полная первая строка запроса (GET /blog/5?x=1 HTTP/1.1); не меняется при внутренних перезаписях — поэтому используется в правилах-редиректах, чтобы не зациклиться.HTTP_USER_AGENT— User-Agent клиента;HTTP_REFERER— заголовок Referer;HTTP_COOKIE— Cookie.HTTP:Имя-Заголовка— любой входящий HTTP-заголовок (%{HTTP:X-Forwarded-Proto},%{HTTP:Accept-Language}).ENV:ИМЯ— переменная окружения (например, выставленная[E=…]илиSetEnvIf).REMOTE_ADDR— IP-адрес клиента.TIME/TIME_YEAR/TIME_MON/TIME_DAY/TIME_HOUR/TIME_MIN/TIME_SEC/TIME_WDAY— текущее время сервера.IS_SUBREQ—true, если это внутренний под-запрос.- (полный список и поведение — в туториале «Как работает mod_rewrite».)
mod_alias — простые редиректы и алиасы
Простые редиректы по точному пути/префиксу или по regex — не требуют RewriteEngine.
Redirect— внешний редирект по точному пути (или префиксу — тогда хвост дописывается к новому адресу). Синтаксис:Redirect [код] <старый-путь> <новый-путь-или-URL>(код:permanent/301,temp/302(по умолч.),seeother/303,gone/410— без второго аргумента). Пример:Redirect 301 /old-page.html /new-page.html.RedirectMatch— то же по регулярному выражению, с бэкрефами$1. Синтаксис:RedirectMatch [код] <regex> <замена>. Пример:RedirectMatch 301 ^/old-section/(.*)$ /new-section/$1.RedirectPermanent— сокращение дляRedirect 301. Синтаксис:RedirectPermanent <старый> <новый>. Пример:RedirectPermanent /old /new.RedirectTemp— сокращение дляRedirect 302. Синтаксис:RedirectTemp <старый> <новый>. Пример:RedirectTemp /shop /coming-soon.
В .htaccess нельзя: Alias, AliasMatch, ScriptAlias, ScriptAliasMatch. Много 301-редиректов из списка — пакетный генератор.
mod_headers — HTTP-заголовки
Добавление, изменение и удаление HTTP-заголовков ответа и запроса.
Header— заголовок ответа. Действия:set(установить, заменив),always set(даже для ошибок/редиректов),append,add,unset,edit/edit*(regex-замена значения),merge. Можно условиеenv=ИМЯ/expr=…. Синтаксис:Header [always] <действие> <Имя> ["значение"] [env=…]. Пример:Header always set X-Frame-Options "SAMEORIGIN"/Header unset X-Powered-By. (Заголовки безопасности — генератор (блок security headers), рецепты.)RequestHeader— заголовок запроса (который увидит бэкенд/прокси/CGI). Синтаксис:RequestHeader <действие> <Имя> ["значение"]. Пример:RequestHeader set X-Forwarded-Proto "https".
Полный разбор HTTP-заголовков, которые ставят через Header set (безопасность — CSP, HSTS, X-Frame-Options; CORS; кэш; прочее) — справочник HTTP-заголовков.
mod_expires — заголовки кэширования
Генерация заголовков Expires и Cache-Control: max-age — насколько долго браузер/прокси может кэшировать ответ.
ExpiresActive— включить генерацию этих заголовков. Синтаксис:ExpiresActive On|Off. Пример:ExpiresActive On.ExpiresByType— срок кэша для конкретного MIME-типа. Синтаксис:ExpiresByType <mime> "<base> plus <N> <units>"(base:access(с момента запроса) /modification(с даты файла);units:seconds/minutes/hours/days/weeks/months/years). Пример:ExpiresByType image/png "access plus 1 year".ExpiresDefault— срок кэша по умолчанию для всего остального. Синтаксис:ExpiresDefault "<base> plus <N> <units>". Пример:ExpiresDefault "access plus 1 month". (Кэш статики — рецепт, генератор.)
Когда и насколько долго кэшировать, чем кэш в браузере отличается от gzip — собрано в гиде «Ускорение сайта через .htaccess».
mod_deflate / mod_filter / mod_mime — сжатие и фильтры вывода
Сжатие ответов (GZIP/Brotli) и другие фильтры на выводе.
AddOutputFilterByType— применить выходной фильтр к ответам указанных MIME-типов. Синтаксис:AddOutputFilterByType <ФИЛЬТР> <mime> …. Пример:AddOutputFilterByType DEFLATE text/html text/css application/javascript. (Для Brotli —BROTLI_COMPRESS(если на хостинге есть mod_brotli); формально директива помечена устаревшей с Apache 2.3.7 в пользу<FilesMatch>+SetOutputFilter, но по-прежнему широко используется и работает.)SetOutputFilter— применить выходной фильтр ко всем файлам в каталоге/секции. Синтаксис:SetOutputFilter <ФИЛЬТР>. Пример:<FilesMatch "\.(html|css|js)$"> SetOutputFilter DEFLATE </FilesMatch>.AddOutputFilter— применить фильтр по расширению файла. Синтаксис:AddOutputFilter <ФИЛЬТР> <.ext> …. Пример:AddOutputFilter INCLUDES .shtml.RemoveOutputFilter— снять привязку фильтра к расширению (для подкаталога). Синтаксис:RemoveOutputFilter <.ext> …. Пример:RemoveOutputFilter .shtml. (GZIP — рецепт, генератор.)
Как настроить сжатие правильно (что сжимать, что нет, gzip vs Brotli) — в гиде «Ускорение сайта через .htaccess».
mod_mime — типы, обработчики, кодировки
Сопоставление расширений файлов с MIME-типами, обработчиками, кодировками и языками.
AddType— связать MIME-тип с расширением(ями). Синтаксис:AddType <mime> <.ext> …. Пример:AddType application/font-woff2 .woff2.AddHandler— связать обработчик с расширением. Синтаксис:AddHandler <handler> <.ext> …. Пример:AddHandler application/x-httpd-php .php .phtml.AddEncoding— пометить расширение как контент с указаннымContent-Encoding. Синтаксис:AddEncoding <encoding> <.ext> …. Пример:AddEncoding gzip .gz.AddCharset— связать кодировку с расширением. Синтаксис:AddCharset <charset> <.ext> …. Пример:AddCharset UTF-8 .utf8.AddLanguage— связать язык с расширением (для негоциации MultiViews). Синтаксис:AddLanguage <lang> <.ext> …. Пример:AddLanguage ru .ru.DefaultLanguage— язык по умолчанию для файлов без.lang-расширения. Синтаксис:DefaultLanguage <lang>. Пример:DefaultLanguage ru.RemoveType/RemoveHandler/RemoveEncoding/RemoveCharset/RemoveLanguage— снять привязку, унаследованную от родителя, для этого каталога. Синтаксис:RemoveHandler <.ext> …. Пример:RemoveHandler .html .htm(отдавать.htmlкак статику, не как обработчик).MultiviewsMatch— какие расширения учитывать приMultiViews. Синтаксис:MultiviewsMatch <Any|NegotiatedOnly|Filters|Handlers …>. Пример:MultiviewsMatch Any.ModMimeUsePathInfo— учитывать лиPATH_INFOпри определении типа/обработчика. Синтаксис:ModMimeUsePathInfo On|Off. Пример:ModMimeUsePathInfo On. (Редко.)
mod_dir — индексные страницы каталога
Что отдавать при заходе на каталог; запасной ресурс.
DirectoryIndex— список файлов, которые отдавать при запросе каталога (/или/dir/); берётся первый существующий слева направо. Синтаксис:DirectoryIndex <файл> …(илиdisabled— отключить). Пример:DirectoryIndex index.php index.html home.html.DirectorySlash— добавлять ли автоматически слэш в конец URL каталога (редирект/dir→/dir/). Синтаксис:DirectorySlash On|Off. Пример:DirectorySlash Off. (Отключение требует осторожности — могут сломаться относительные ссылки и листинг каталога.)FallbackResource— что отдавать, если запрошенного файла/каталога нет (простая альтернатива фронт-контроллеру на mod_rewrite). Синтаксис:FallbackResource <URL-путь>(илиdisabled). Пример:FallbackResource /index.php.DirectoryIndexRedirect— отдавать ли HTTP-редирект на индексный файл вместо внутренней отдачи. Синтаксис:DirectoryIndexRedirect On|Off|<код>. Пример:DirectoryIndexRedirect 301. (Apache 2.5/trunk — на стабильном 2.4 может отсутствовать.)
mod_autoindex — листинг каталога (если включён)
Внешний вид автоматического списка файлов — имеет смысл, только если включён Options +Indexes (что обычно наоборот отключают).
IndexOptions— настройки листинга:FancyIndexing,HTMLTable,SuppressDescription,SuppressHTMLPreamble,IconsAreLinks,NameWidth=*,DescriptionWidth=*,IgnoreCase,ShowForbidden,VersionSort, … Синтаксис:IndexOptions [+|-]<опция> …. Пример:IndexOptions FancyIndexing HTMLTable NameWidth=* IgnoreCase.IndexIgnore— файлы/маски, не показываемые в листинге. Синтаксис:IndexIgnore <маска> …. Пример:IndexIgnore .htaccess .git *.bak *~ HEADER.* README.*.IndexOrderDefault— сортировка по умолчанию:Ascending|Descending Name|Date|Size|Description. Синтаксис:IndexOrderDefault <направление> <ключ>. Пример:IndexOrderDefault Descending Date.HeaderName/ReadmeName— файл, вставляемый в начало / конец листинга. Синтаксис:HeaderName <файл>/ReadmeName <файл>. Пример:HeaderName HEADER.html/ReadmeName README.html.AddIcon/AddIconByType/AddIconByEncoding— иконка для файла/имени / MIME-типа / кодировки. Синтаксис:AddIconByType <иконка> <mime-маска> …. Пример:AddIconByType (TXT,/icons/text.gif) text/*.AddDescription— текстовое описание для файла/маски в листинге. Синтаксис:AddDescription "<текст>" <маска> …. Пример:AddDescription "Архив проекта" *.zip.
mod_negotiation — согласование контента (MultiViews)
Выбор варианта файла по заголовкам Accept-* клиента (язык, тип) — page → page.ru.html / page.en.html.
Options +MultiViews— включить согласование. Синтаксис:Options +MultiViews. Пример:Options +MultiViews.LanguagePriority— приоритет языков, если клиент не выразил предпочтений. Синтаксис:LanguagePriority <lang> …. Пример:LanguagePriority ru en.ForceLanguagePriority— поведение при неоднозначности/отсутствии совпадения:None/Prefer/Fallback. Синтаксис:ForceLanguagePriority <режим> …. Пример:ForceLanguagePriority Prefer Fallback.CacheNegotiatedDocs— разрешать ли прокси кэшировать результат согласования. Синтаксис:CacheNegotiatedDocs On|Off. Пример:CacheNegotiatedDocs Off. (Редко.)
mod_setenvif — переменные по признакам запроса
Выставить переменную окружения, если атрибут запроса (заголовок, IP, URI, метод) совпал с регулярным выражением.
SetEnvIf— выставить переменную при совпадении атрибута запроса с regex. Атрибут: имя HTTP-заголовка либоRemote_Addr/Remote_Host/Server_Addr/Request_Method/Request_Protocol/Request_URI/ имя уже выставленной переменной. Синтаксис:SetEnvIf <атрибут> <regex> <ИМЯ>[=значение] …. Пример:SetEnvIf Request_URI "\.(jpg|png|gif)$" is_image=1.SetEnvIfNoCase— то же, без учёта регистра. Синтаксис:SetEnvIfNoCase <атрибут> <regex> <ИМЯ>[=значение]. Пример:SetEnvIfNoCase User-Agent "(AhrefsBot|SemrushBot)" bad_bot=1.SetEnvIfExpr— выставить переменную, если выражениеexprистинно. Синтаксис:SetEnvIfExpr "<expr>" <ИМЯ>[=значение]. Пример:SetEnvIfExpr "%{HTTP_HOST} == 'example.com'" canonical=1.BrowserMatch/BrowserMatchNoCase— сокращение дляSetEnvIf User-Agent …. Синтаксис:BrowserMatch <regex> <ИМЯ>[=значение]. Пример:BrowserMatchNoCase "MSIE [1-9]\b" old_browser=1.
mod_env — переменные окружения
Задание/проброс/удаление переменных окружения (видны как %{ENV:…}, в CGI/PHP — в $_SERVER).
SetEnv— задать переменную окружения с фиксированным значением. Синтаксис:SetEnv <ИМЯ> <значение>. Пример:SetEnv APP_ENV production.UnsetEnv— удалить переменную окружения. Синтаксис:UnsetEnv <ИМЯ> …. Пример:UnsetEnv HTTP_PROXY(защита от уязвимости «httpoxy»).PassEnv— пробросить переменную из окружения, в котором запущен сервер. Синтаксис:PassEnv <ИМЯ> …. Пример:PassEnv LANG TZ.
mod_auth* — аутентификация (Basic / Digest)
Закрытие каталога логином-паролем (HTTP Basic/Digest auth).
AuthType— тип аутентификации. Синтаксис:AuthType Basic|Digest|None. Пример:AuthType Basic.AuthName— название «зоны» (показывается в окне ввода пароля). Синтаксис:AuthName "<текст>". Пример:AuthName "Закрытая зона".AuthBasicProvider— источник пользователей:file(по умолч.),dbm,dbd,ldap,socache. Синтаксис:AuthBasicProvider <provider> …. Пример:AuthBasicProvider file.AuthUserFile— путь к файлу.htpasswd(строкилогин:хеш). Синтаксис:AuthUserFile <абсолютный-путь>. Пример:AuthUserFile "/srv/site/.htpasswd". (Путь абсолютный; файл лучше держать внеDocumentRoot; сгенерировать его и блок авторизации — /htpasswd/.)AuthGroupFile— путь к файлу групп (строкигруппа: user1 user2). Синтаксис:AuthGroupFile <абсолютный-путь>. Пример:AuthGroupFile "/srv/site/.htgroup".Require(mod_authz_core) — кому разрешён доступ:valid-user(любой из файла),user alice bob,group admins,ip 203.0.113.0/24,host example.com,all granted,all denied,not <…>,expr "<…>". Синтаксис:Require <условие>. Пример:Require valid-user/Require ip 203.0.113.0/24. (В<RequireAll>/<RequireAny>/<RequireNone>условия комбинируются (И/ИЛИ/НИ ОДНОГО).)AuthMerging— как объединятьRequire-правила родителя и потомка:Off(потомок заменяет),And,Or. Синтаксис:AuthMerging Off|And|Or. Пример:AuthMerging And.- Кратко про digest:
AuthType Digest,AuthDigestProvider file,AuthDigestDomain "/admin/"— используется редко (Basic + HTTPS обычно достаточно).
Подробнее про парольную защиту — статья «Парольная защита», генератор .htpasswd — /htpasswd/.
mod_access_compat — контроль доступа Apache 2.2 (устаревшее)
Старый синтаксис ограничения доступа (Apache 2.2). В 2.4 заменён на Require — конвертер /apache24/.
Order— порядок примененияAllow/Deny:Allow,Deny(по умолчанию запрет — пускаем только явно разрешённых) илиDeny,Allow(по умолчанию разрешено — блокируем только явно запрещённых). Синтаксис:Order Allow,Deny | Deny,Allow. Пример:Order Deny,Allow. (Убрано в Apache 2.4 (модуль mod_access_compat для совместимости); правильно —Require.)Allow from— разрешить доступ перечисленным: IP / подсеть (203.0.113.0/24) / домен /all/env=ИМЯ. Синтаксис:Allow from <…> …. Пример:Allow from 203.0.113.0/24. (Apache 2.4 →Require ip 203.0.113.0/24.)Deny from— запретить доступ перечисленным. Синтаксис:Deny from <…> …. Пример:Deny from all. (Apache 2.4 →Require all denied/Require not ip ….)Satisfy— при одновременном наличии аутентификации (Require valid-user) и контроля доступа (Allow/Deny):All(нужно и то, и другое) /Any(достаточно одного). Синтаксис:Satisfy All|Any. Пример:Satisfy Any. (Убрано в Apache 2.4 — используйте<RequireAll>/<RequireAny>.)
Какие из этих директив реально нужны для защиты сайта (и в какой комбинации) — собрано в гид «Безопасность сайта через .htaccess».
Блокировка по IP подробнее — статья «Фильтрация по IP»; перевести Order/Allow/Deny/Satisfy на синтаксис 2.4 — конвертер.
mod_php — настройки PHP (только mod_php)
Установка php.ini-параметров из .htaccess — работает только с серверным модулем mod_php.
php_value— задать значение настройкиphp.iniуровняPHP_INI_ALL/PHP_INI_USER/PHP_INI_PERDIR. Синтаксис:php_value <имя> <значение>. Пример:php_value upload_max_filesize 32M.php_flag— то же для булевых настроек (On/Off). Синтаксис:php_flag <имя> On|Off. Пример:php_flag display_errors Off.php_admin_value/php_admin_flag— то же, но с приоритетом «admin» (нельзя переопределить из скрипта черезini_set()). Синтаксис:php_admin_value <имя> <значение>. Пример:php_admin_value open_basedir "/srv/site/".
На PHP-FPM или CGI этих директив в .htaccess быть не должно — Apache вернёт 500 Internal Server Error. Для FPM используйте файл .user.ini рядом со скриптами (для PHP_INI_USER/PHP_INI_PERDIR-настроек) или конфигурацию пула FPM. Подробнее — рецепты.
контейнеры (секции конфигурации)
Блочные директивы, ограничивающие область действия вложенных директив.
<Files "имя">/<FilesMatch "regex">— применить вложенные директивы к файлам с таким именем / именем по регулярке (в этом каталоге и ниже). Синтаксис:<Files "secret.txt"> … </Files>/<FilesMatch "\.(env|log|sql)$"> … </FilesMatch>. Пример:<FilesMatch "\.env$"> Require all denied </FilesMatch>.<If "expr">/<ElseIf "expr">/<Else>— применить вложенные директивы, если выражениеexprистинно (Apache 2.4). Синтаксис:<If "%{HTTP_HOST} == 'example.com'"> … </If>. Пример:<If "%{REQUEST_METHOD} == 'POST'"> Header set X-Method "post" </If>.<IfModule [!]mod_xxx.c>— применить вложенные директивы, только если (с!— если не) загружен модуль. Синтаксис:<IfModule mod_rewrite.c> … </IfModule>. Пример:<IfModule mod_expires.c> ExpiresActive On </IfModule>. (Полезно, чтобы.htaccessне падал с 500, когда модуля нет на хостинге.)<IfVersion "<оператор> <версия>">— применить, если версия Apache попадает под условие (модуль mod_version; на большинстве хостингов есть). Синтаксис:<IfVersion >= 2.4> … </IfVersion>(операторы:=,<,>,<=,>=,~(regex)). Пример:<IfVersion < 2.4> Order Allow,Deny; Allow from all </IfVersion>.<RequireAll>/<RequireAny>/<RequireNone>— группировкаRequire-условий: пройти все / любое / ни одного (Apache 2.4, mod_authz_core). Синтаксис:<RequireAll> Require all granted; Require not ip 203.0.113.5 </RequireAll>. Пример: тот же — «пускать всех, кроме203.0.113.5».<Limit GET POST>/<LimitExcept GET POST>— применить вложенные директивы доступа только к указанным HTTP-методам / ко всем, кроме указанных. Синтаксис:<LimitExcept GET POST HEAD> Require valid-user </LimitExcept>. Пример: тот же. (Внутри — только директивы контроля доступа (Require/Order/Allow/Deny); по возможности используйте<LimitExcept>(закрыть всё, кроме нужного), а не<Limit>.)
В .htaccess нельзя: <Directory>, <DirectoryMatch>, <Location>, <LocationMatch>, <VirtualHost>, <Proxy>, <ProxyMatch> — они работают только в конфиге сервера/vhost.
Инструменты и связанное
Краткая выжимка самых частых строк — шпаргалка по .htaccess.
Проверка .htaccess (линтер) · Генератор .htaccess · Пакетный генератор 301-редиректов · Генератор .htpasswd · Конвертер Apache 2.2 → 2.4 · Тестер RewriteRule · Рецепты .htaccess · Как работает mod_rewrite · Фильтрация по IP · Парольная защита · Блокировка по referer