.htaccess Generator for WordPressは、WordPressのための.htaccess生成ツールです。
セキュリティ強化やパフォーマンス向上をさせるための.htaccessのコードを生成することができます。
.htaccess Generator for WordPressの使い方
.htaccess Generator for WordPressにアクセスして、各種設定項目を選択していきます。

| プリセット | 自動で最適な構成を設定 |
| 対象 Apache バージョン | 対象サーバーのApacheのバージョン |
| Options & ErrorDocument | ディレクトリ一覧などのセキュリティ設定 |
| ファイルアクセス制限 | ファイルへのアクセス制限 |
| IP アドレスブロック | IPアドレスによるブロック |
| リライトルール | リライトルールの設定 |
| セキュリティレスポンスヘッダー | セキュリティレスポンスヘッダーの設定 |
| キャッシュ & パフォーマンス | キャッシュ等のパフォーマンス設定 |
| wp-admin Basic 認証 | 管理画面にBasic認証を設定 |
| wp-content/uploads 保護 | アップロードフォルダのセキュリティ設定 |
「プレビュー」に生成されたコードが表示されるので、コピーもしくはダウンロードしてサーバーに設置します。

「wp-content/uploads 保護」を有効にした場合は、プレビューに[uploads]というタブが追加されます。[uploads]タブの.htaccessは、wp-content/uploadsフォルダに設置します。

おすすめ設定で出力される.htaccessのコード
一例として、プリセットの”おすすめ設定”で出力される.htaccessを紹介します。
ルート.htaccess
# BEGIN HtaccessGenerator
# Generated by .htaccess Generator - https://htaccess-generator-b46.pages.dev/
# ===========================
# セキュリティ設定
# ===========================
Options -MultiViews -Indexes
ErrorDocument 403 default
ErrorDocument 404 default
# XML-RPC へのアクセスを無効化
<Files xmlrpc.php>
Require all denied
</Files>
# wp-config.php を保護
<Files wp-config.php>
Require all denied
</Files>
# .htaccess へのアクセス禁止
<Files .htaccess>
Require all denied
</Files>
# 特定のファイルタイプへのアクセスを制限
<FilesMatch "(?i)\.(inc|log|sh|sql)$">
Require all denied
</FilesMatch>
# ===========================
# リライトルール
# ===========================
<IfModule mod_rewrite.c>
RewriteEngine On
# スラッシュの重複(//)を正規化
RewriteCond %{THE_REQUEST} \s[^\s?]*//
RewriteRule ^ %{REQUEST_URI} [R=301,L,NE]
# 悪意のあるボット・スクリプトをブロック
RewriteCond %{HTTP_USER_AGENT} (nikto|sqlmap|masscan|nmap|zgrab|wget|curl|httpie|python-requests|go-http-client|libwww-perl|scrapy|java/) [NC]
RewriteRule .* - [F,L]
# バックドア / マルウェア探索をブロック
RewriteCond %{REQUEST_URI} (alfa\.php|alfaindex\.php|c99\.php|r57\.php|shell\.php|webshell\.php|b374k\.php|wso\.php|about\.php|lock360\.php|dark\.php|FilesMan\.php|cgialfa|wp-vcd\.php) [NC]
RewriteRule .* - [F,L]
# wp-* ディレクトリの多重ネストリクエストをブロック
RewriteCond %{REQUEST_URI} wp-(content|admin|includes)/.*wp-(content|admin|includes)/ [NC]
RewriteRule .* - [F,L]
# wp-admin/includes/ への直接アクセスをブロック
RewriteCond %{REQUEST_URI} ^/wp-admin/includes(?:/|$) [NC]
RewriteRule .* - [F,L]
# wp-includes/*.php への直接アクセスをブロック
RewriteCond %{REQUEST_URI} ^/wp-includes/[^/]+\.php$ [NC]
RewriteRule .* - [F,L]
# HTTPS リダイレクト
RewriteCond %{HTTPS} !=on [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# 不正なクエリ文字列をブロック
RewriteCond %{QUERY_STRING} (^|&)w=[^&]+(&|$) [NC]
RewriteRule ^ - [R=410,L]
</IfModule>
# ===========================
# キャッシュ & パフォーマンス設定
# ===========================
# Gzip 圧縮
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/json
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE font/ttf font/otf font/woff font/woff2
</IfModule>
# ブラウザキャッシュ設定
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/webp "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/vnd.microsoft.icon "access plus 1 year"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rdf+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
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"
ExpiresByType application/manifest+json "access plus 1 week"
ExpiresByType text/html "access plus 0 seconds"
</IfModule>
# Cache-Control ヘッダー
<IfModule mod_headers.c>
<FilesMatch "\.(css|js)$">
Header always set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
<FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|ico)$">
Header always set Cache-Control "public, max-age=2592000"
</FilesMatch>
<FilesMatch "\.(woff|woff2|ttf|otf)$">
Header always set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
<FilesMatch "\.(mp4|webm|ogv)$">
Header always set Cache-Control "public, max-age=2592000"
</FilesMatch>
<FilesMatch "\.(html|htm)$">
Header always set Cache-Control "no-cache, must-revalidate"
</FilesMatch>
</IfModule>
# MIME タイプ追加
<IfModule mime_module>
AddType image/x-icon .ico
AddType image/svg+xml .svg
AddType application/x-font-ttf .ttf
AddType application/x-font-woff .woff
AddType application/x-font-opentype .otf
AddType application/vnd.ms-fontobject .eot
</IfModule>
# ETags を無効化
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
# ===========================
# セキュリティレスポンスヘッダー
# ===========================
<IfModule mod_headers.c>
# HSTS(HTTPS 接続時のみ送信)
Header always set Strict-Transport-Security "max-age=300" "expr=%{HTTPS} == 'on' || %{HTTP:X-Forwarded-Proto} == 'https'"
# CSP
<If "%{REQUEST_URI} !~ m#(?:^|/)wp-(admin(?:/|$)|login\.php)#">
Header always set Content-Security-Policy-Report-Only "default-src 'self' https:; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https:; frame-src 'self'; frame-ancestors 'self'"
</If>
<If "%{REQUEST_URI} =~ m#(?:^|/)wp-(admin(?:/|$)|login\.php)#">
Header always set Content-Security-Policy-Report-Only "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https:; frame-src 'self'; frame-ancestors 'self'"
</If>
# X-Content-Type-Options
Header always set X-Content-Type-Options "nosniff"
# X-Frame-Options(CSP の frame-ancestors と併用 - CSP 非対応の古いブラウザ向け保険)
Header always set X-Frame-Options "SAMEORIGIN"
# Referrer-Policy
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Permissions-Policy
Header always set Permissions-Policy "camera=(), microphone=(), payment=(), usb=(), gyroscope=(), magnetometer=(), accelerometer=(), fullscreen=(), geolocation=()"
</IfModule>
# END HtaccessGenerator
uploads
# PHP 関連ファイルの実行を禁止
<FilesMatch "(?i)\.(?:php|phar|phtml)$">
Require all denied
</FilesMatch>
あとがき
項目を選んでいくだけで自動でコードを生成してくれるのは楽で良いですね。
ただ、.htaccessの記述をミスるとサイトが表示できなくなってしまうのことがあるのでご注意ください。



コメントを残す