2026年6月3日

2026年6月3日

mod_rewriteのRewriteCond・RewriteRuleの書き方

はじめに

mod_rewriteはApache HTTP Serverで使用される強力なURLリライト機能を提供します。この機能を使って、サーバー側でのURL変換やリダイレクトが可能になり、ユーザーエンジャージメントの向上やSEO対策など、さまざまな用途に活用できます。

症状・背景

mod_rewriteが必要になる主な場面:

  • ログインページへのアクセスを制限する
  • 特定のドメインからのトラフィックのみを許可する
  • URLのスラッグ化や簡略化を行う
  • 旧URLから新URLへのリダイレクト実行

手順・設定方法

ステップ1: RewriteEngineを有効にする

# mod_rewrite機能を使用可能にします
<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

# レコードとルールの追加

ステップ2: RewriteCondによる条件判定

# 条件に基づいてルールを適用するための設定です
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]

ステップ3: RewriteRuleによるルーティング制御

# URLリライトを行うルールを定義します
RewriteRule ^oldpage\.html$ /newpage.html [R=301,L]

# 以下は、特定のパスが存在しない場合に404エラーを返す例です
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

ステップ4: リダイレクトとスラッグ化

# サブディレクトリを削除するためのリダイレクト
RewriteCond %{THE_REQUEST} \s/+(.*?)/{2,}(.*?\?.*) HTTP/
RewriteRule ^ /%1%2 [R=301,L]

# ブラケットを削除してスラッグ化する例
RewriteCond %{REQUEST_URI} \[([^\]\/]+)\]$
RewriteRule . - [E=SANS_BRACKETS:%1]
RewriteRule ^(.*)$ /$1?%{ENV:SANS_BRACKETS} [L,NC,QSA]

ステップ5: 実践的なトラブルシュート

# 重複したルールを確認する
RewriteCond %{THE_REQUEST} \s/+\?q=([^&]+) HTTP/
RewriteRule ^ /search?query=%1 [R,L]

注意事項

  • デバッグ用に[NC], [L], [R=301]などのフラグを適切に使用すること。
  • セキュリティ上、無害なURLのみを処理するための条件設定を行うこと。
  • 重複したルールは性能低下の原因となる場合があるので確認すること。

まとめ

1. RewriteEngine: mod_rewrite機能を使用可能にする

2. RewriteCond: レコードが適用される条件を指定する

3. RewriteRule: URLリライトを行うためのルールを定義する

4. リダイレクト: 特定の状況でのリダイレクトを実行する

5. スラッグ化: URLを簡素化し、SEO対策をする

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ