mod_rewrite は、Apache HTTP サーバーの強力なモジュールであり、リクエストされた URL を柔軟に再書き換えするために使用されます。このモジュールは、動的な URL の作成や、SEO(検索エンジン最適化)に適した URL の生成、URL の正規化、リダイレクトなど、さまざまな目的に利用できます。この記事では、mod_rewrite の基本的な概念から、具体的な設定方法までを詳しく説明します。
1. mod_rewrite のインストールと有効化
まず最初に、mod_rewrite がインストールされていることを確認する必要があります。多くの Linux 系 OS では、Apache に mod_rewrite が標準で含まれていますが、もし含まれていない場合は、以下のようにしてインストールできます。
Ubuntu/Debian 系の場合:
bashsudo a2enmod rewrite sudo systemctl restart apache2
CentOS/RHEL 系の場合:
bashsudo yum install mod_rewrite sudo systemctl restart httpd
インストール後、mod_rewrite を有効化するために、Apache の設定ファイルを編集します。
2. .htaccess ファイルの利用
mod_rewrite の設定は、通常 .htaccess ファイルを使って行います。このファイルは、Apache サーバーのディレクトリごとに設定を行えるため、非常に便利です。
まず、ウェブサイトのルートディレクトリに .htaccess ファイルを作成します。もし .htaccess ファイルが既に存在する場合は、それを編集します。
bashtouch .htaccess
その後、以下のように .htaccess ファイルに設定を追加します。
3. 基本的な書き換えルール
mod_rewrite の最も基本的な機能は、リクエストされた URL を新しい URL に書き換えることです。これを実現するためには、RewriteEngine を有効にし、RewriteRule を使ってルールを設定します。
例1: URL の書き換え
以下は、URL の書き換えの基本的な例です。
apacheRewriteEngine On RewriteRule ^old-page$ /new-page [R=301,L]
このルールは、old-page という URL にアクセスがあった場合、301 リダイレクトを使って /new-page にリダイレクトするものです。R=301 は、リダイレクトの種類(この場合は「恒久的なリダイレクト」)を指定します。L は「最後のルール」を意味し、このルールで処理が完了したことを示します。
例2: クエリ文字列を使用した書き換え
mod_rewrite を使用して、クエリ文字列を URL パスに変換することもできます。
apacheRewriteEngine On RewriteRule ^product/([0-9]+)$ /product.php?id=$1 [L]
この例では、product/123 のような URL にアクセスした場合、product.php?id=123 に内部的に書き換えられます。([0-9]+) は正規表現で、数字が 1 回以上繰り返されることを意味します。
4. 正規表現と条件の使用
mod_rewrite では、URL のパターンを正規表現でマッチさせることができます。また、RewriteCond を使って、リクエストに特定の条件が合致した場合にのみ書き換えルールを適用することができます。
例3: 特定の IP アドレスからのアクセスに対する書き換え
apacheRewriteEngine On RewriteCond %{REMOTE_ADDR} ^192\.168\.1\. RewriteRule ^.*$ /blocked.html [R=403,L]
このルールでは、IP アドレスが 192.168.1.* のリクエストに対して、blocked.html ページを返し、アクセスを拒否(HTTP ステータス 403)します。
5. リダイレクトとエラー処理
mod_rewrite は、URL のリダイレクトだけでなく、エラー処理にも利用できます。例えば、404 エラー(ページが見つからない)時にカスタムエラーページを表示することができます。
例4: 404 エラーページのカスタマイズ
apacheRewriteEngine On RewriteCond %{REQUEST_URI} !^/error.html$ RewriteRule ^.*$ /error.html [R=404,L]
このルールでは、error.html ページがリクエストされた場合を除き、すべてのリクエストに対して error.html を返し、404 エラーを表示します。
6. SEO(検索エンジン最適化)のための URL の書き換え
SEO の観点から、検索エンジンにとって親しみやすい URL を作成することは非常に重要です。mod_rewrite を使用することで、動的な URL を静的な URL に変換できます。
例5: 動的な URL を静的な URL に変換
例えば、product.php?id=123 のような動的 URL を product/123 のような静的な URL に書き換えることができます。
apacheRewriteEngine On RewriteRule ^product/([0-9]+)$ /product.php?id=$1 [L]
これにより、ユーザーはよりクリーンで覚えやすい URL を使用でき、検索エンジンもその URL を好ましく評価します。
7. セキュリティの強化
mod_rewrite はセキュリティの向上にも役立ちます。たとえば、特定のファイルやディレクトリへのアクセスを制限することができます。
例6: 特定のファイル拡張子へのアクセス制限
apacheRewriteEngine On RewriteRule \.(htaccess|htpasswd|ini|conf)$ - [F,L]
このルールでは、.htaccess、.htpasswd、.ini、.conf といった重要なファイルへのアクセスを禁止します。F は「アクセス禁止」を意味し、L は「最後のルール」を示します。
8. mod_rewrite のデバッグ
mod_rewrite の設定がうまくいかない場合、Apache のログを利用してデバッグすることができます。ログレベルを上げて、mod_rewrite の動作を詳細に確認することができます。
apacheLogLevel alert rewrite:trace6
これにより、mod_rewrite の処理に関する詳細な情報が Apache のエラーログに記録されます。
9. よく使う mod_rewrite のテクニック
- 正規化:
wwwを取り除いたり、httpsを強制することで、URL の正規化が可能です。 - モバイル対応: モバイルユーザーに対して特定のページを表示するための書き換え。
- キャッシュ制御: 特定の URL に対してキャッシュを制御するためのルール。
10. まとめ
mod_rewrite は非常に強力で柔軟なツールであり、URL の再書き換えやリダイレクト、SEO の最適化、セキュリティの強化に多くの用途があります。その基本的な設定方法や活用法を理解し、適切に使いこなすことで、ウェブサイトのパフォーマンスとセキュリティを大きく向上させることができます。
