Генератор .htaccess

Редиректы, кеширование и правила безопасности .htaccess для Apache с проверкой конфликтов

Параметры

Канонический URL
Канонический хост
Завершающий слеш

/blog/index.html перенаправляется на /blog/.

Свои редиректы
Редиректы: 0

Своих редиректов пока нет. Добавьте один или используйте массовую вставку.

Сгенерированный .htaccess

# Generated by the CodingTool.dev .htaccess Generator for Apache 2.4.
# Needs AllowOverride AuthConfig FileInfo Indexes Options (or All); Apache answers 500 for directives it does not allow.
# Place this file in the document root. Test on a staging site before going live.

# Disable directory listings.
Options -Indexes

# Deny access to .htaccess, .htpasswd and other .ht files.
<FilesMatch "^\.ht">
  Require all denied
</FilesMatch>

# Deny backup, dump and editor swap files such as .bak, .old, .sql, .swp and ~ copies.
<FilesMatch "(\.(bak|old|sql|swp)|~)$">
  Require all denied
</FilesMatch>

<IfModule mod_rewrite.c>
  RewriteEngine On

  # Block dotfiles and dot-folders such as .env and .git; keep /.well-known/ reachable.
  RewriteCond %{REQUEST_URI} !(^|/)\.well-known/
  RewriteRule (^|/)\. - [F]

  # Force HTTPS: redirect every HTTP request to the same host over HTTPS.
  RewriteCond %{HTTPS} !=on
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

<IfModule mod_headers.c>
  # Basic security headers. Adjust Permissions-Policy if your site uses these features.
  Header always set X-Content-Type-Options "nosniff"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

# Compress text responses. AddOutputFilterByType needs mod_filter in Apache 2.4.
<IfModule mod_deflate.c>
  <IfModule mod_filter.c>
    # Text and markup
    AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml
    # Scripts and data
    AddOutputFilterByType DEFLATE text/javascript application/javascript application/json application/ld+json application/manifest+json
    # Feeds and XML
    AddOutputFilterByType DEFLATE application/xml application/rss+xml application/atom+xml
    # SVG and uncompressed fonts
    AddOutputFilterByType DEFLATE image/svg+xml font/ttf font/otf application/vnd.ms-fontobject
  </IfModule>
</IfModule>

# Browser caching (conservative): short lifetimes that are safe without versioned file names.
<IfModule mod_expires.c>
  ExpiresActive On
  # HTML and data: always revalidate
  ExpiresByType text/html "access plus 0 seconds"
  ExpiresByType application/json "access plus 0 seconds"
  ExpiresByType application/ld+json "access plus 0 seconds"
  ExpiresByType application/xml "access plus 0 seconds"
  ExpiresByType text/xml "access plus 0 seconds"
  # Feeds
  ExpiresByType application/rss+xml "access plus 1 hour"
  ExpiresByType application/atom+xml "access plus 1 hour"
  # CSS and JavaScript
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
  # Web app manifest
  ExpiresByType application/manifest+json "access plus 1 week"
  # Images
  ExpiresByType image/avif "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 month"
  # Fonts
  ExpiresByType font/woff "access plus 1 month"
  ExpiresByType font/woff2 "access plus 1 month"
  ExpiresByType font/ttf "access plus 1 month"
  ExpiresByType font/otf "access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
  # Audio and video
  ExpiresByType audio/mpeg "access plus 1 month"
  ExpiresByType audio/ogg "access plus 1 month"
  ExpiresByType video/mp4 "access plus 1 month"
  ExpiresByType video/webm "access plus 1 month"
</IfModule>

.htaccess работает, только если настройка AllowOverride в Apache разрешает эти директивы.

Файл сохраняется как htaccess.txt, потому что браузеры убирают точку в начале имени. Переименуйте его в .htaccess на сервере.

Находки

Конфликтов нет
Ошибки: 0 · Предупреждения: 0 · Редиректы: 0

Заметки (3)

  • Заметка: За балансировщиком или CDN, которые завершают TLS, %{HTTPS} равен off, и правило HTTPS может зациклиться. Сначала уточните у хостинга.

  • Заметка: Нужен AllowOverride AuthConfig, FileInfo, Indexes, Options (или All). Директива вне разрешённого набора приводит к ответу 500.

  • Заметка: Блоки для mod_rewrite, mod_headers, mod_deflate, mod_filter, mod_expires молча пропускаются, если модуль не загружен.

Состав файла

  • Параметры сервера
  • Защита файлов
  • Правила перезаписи
  • Заголовки ответа
  • Сжатие
  • Кеш браузера

Ошибки: 0 · Предупреждения: 0 · Редиректы: 0

Что создаётся

Генератор пишет файл .htaccess для Apache 2.4 под типичные задачи редиректов, скорости и безопасности: принудительный HTTPS, единый канонический хост, порядок со слешами и index.html, свои редиректы 301/302/307/308, сжатие gzip, пресеты кеширования Expires, защита листинга папок и скрытых файлов, базовые заголовки безопасности, необязательный HSTS и свои страницы ошибок. У каждого раздела есть комментарий, а порядок всегда одинаковый, поэтому изменения легко сравнивать.

Проверка конфликтов

Перед записью каждый редирект проверяется на неверный формат источника, небезопасный или неожиданный протокол назначения, дубликаты, редирект на себя, циклы из A в B и обратно и цепочки с лишним переходом. Правила, которые зациклятся или никогда не сработают, не попадают в файл и показываются в разделе находок. Канонический хост и завершающий слеш выбираются одним вариантом, поэтому противоречащие правила вроде добавления и удаления www включить одновременно нельзя.

Важные детали Apache

Все правила перезаписи находятся в одном блоке IfModule mod_rewrite с единственным RewriteEngine On. Смена схемы и хоста выполняется одним редиректом, правила слеша пропускают реальные файлы и папки, а редиректы слеша и index применяются только к запросам GET и HEAD. Контроль доступа использует Require all denied, а не устаревший синтаксис Order и Deny. Блоки, зависящие от модулей, обёрнуты в IfModule: если модуля нет, блок просто пропускается и сайт не ломается.

Перед публикацией

.htaccess работает, только если настройка AllowOverride на сервере разрешает эти директивы; иначе Apache отвечает 500. Положите файл в корень сайта, потому что пути своих редиректов считаются от него. За прокси или CDN, которые завершают TLS, правило HTTPS не видит исходную схему и может зациклиться. Включайте HSTS только когда HTTPS работает везде и начинайте с короткого max-age. Браузеры сохраняют загрузку как htaccess.txt — переименуйте его в .htaccess на сервере. Всё выполняется в вашем браузере, ничего не загружается.

CodingTool официально запущен на

Launched on StartupBaseCodingTool.dev - Free, Fast & Easy Developer Tools in One Place | Product HuntCodingTool - Featured on Startup FameFazier badgeListed on Turbo0Featured on Twelve ToolsFeatured on Findly.toolsLaunchpadly Startup DirectoryCodingTool.dev — Featured on Smol Launch