2026年10月17日
2026年10月17日
mod_rewriteで動的URLを静的URLに変換する方法
はじめに
WebサイトのSEOやユーザビリティ向上のために、動的URLを静的URLへと変換することがしばしば行われます。特にCMSを使用している場合、デフォルトで生成されるような「/?page_id=1」のような動的URLではなく、「/about-us」といったより読みやすい静的URLが好ましいことが多々あります。
この記事では、Apache Webサーバーのmod_rewriteモジュールを用いてWordPressなどのCMSから生成された動的URLを静的URLへと変換する方法について解説します。また、その過程で発生しがちな問題やその解決策も紹介いたします。
症状・背景
このテーマが必要になる主な場面:
- ユーザーがより読みやすいURLを好む場合
- より良いSEOのために静的URLを利用したい場合
- Webサイトの設計において、クリーンでユーザーフレンドリーなURLが求められる場合
手順・設定方法
ステップ1: mod_rewriteモジュールを有効化する
# Apacheサーバーでmod_rewriteを使用できるようにします。Apacheの設定ファイル(通常はhttpd.confやapache2.conf)を開きます。
vi /etc/httpd/conf/httpd.conf # CentOSの場合
# 'LoadModule rewrite_module modules/mod_rewrite.so' の行のコメントを外す
# モジュールがすでに有効化されている場合は、このステップは不要です。
# Apacheを再起動して変更を適用します。
systemctl restart httpd
ステップ2: .htaccessファイルに静的URLへのルーティングルールを追加する
# WordPressのインストールディレクトリで.htaccessファイルを開きます。このファイルは通常、Webサーバーのドキュメントルート直下に存在します。
vi /var/www/html/wordpress/.htaccess # 環境によってパスが異なる可能性があります。
# 次のような静的URLへの変換規則を追加します。
RewriteEngine On
RewriteBase /
RewriteRule ^about-us$ index.php?page_id=2 [L,QSA]
ステップ3: 複数のページやカテゴリに対応する
# 前述のルールを複数のページやカテゴリに適用します。例えば、'news'と'contact'というURLを持つページを動的に変換する場合:
RewriteRule ^news$ index.php?page_id=3 [L,QSA]
RewriteRule ^contact$ index.php?page_id=4 [L,QSA]
# 更に、複数のパターンに対応させるために正規表現を利用することができます。
RewriteRule ^category/(.*)$ index.php?cat=$1 [L,QSA]
ステップ4: リダイレクトと301ステータスコードを使用する
# 現在の動的URLから静的URLへの301リダイレクトを設定します。これにより、SEO効果が向上します。
RewriteCond %{THE_REQUEST} /index\.php\?page_id=2 [NC]
RewriteRule ^ index.php [R=301,L]
# 既存の動的URL(/news?page_id=3)から静的URL(/category/news)へのリダイレクトを設定します。
RewriteCond %{THE_REQUEST} /index\.php\?page_id=3 [NC]
RewriteRule ^news$ /category/news [R=301,L]
注意事項
- Apacheのmod_rewriteモジュールが無効な場合、上記の設定は機能しません。適切に有効化する必要があります。
- .htaccessファイルの変更後、Apacheサーバーを再起動しないと新しいルールが適用されません。
- セキュリティ上の問題から、.htaccessファイルへの書き込み権限は最小限に留めるべきです。また、必要以上の情報が漏洩しないようにするため、具体的なパスや情報を隠すことが推奨されます。
- パフォーマンス面では、大量のルールを設定するとApacheサーバーへの負荷が高まります。適切に最適化することをお勧めします。
まとめ
1. mod_rewriteモジュールの有効化: Apacheで静的URLを使用するためには、まずmod_rewriteモジュールを有効にする必要があります。
2. .htaccessファイルへの追加: .htaccessファイルに必要なルーティング規則を追加し、動的なURLを静的なものへと変換します。
3. 複数のページやカテゴリへの対応: 複数のページやカテゴリに対応するためには、正規表現を使用して柔軟な設定を行います。
4. 301リダイレクト: SEO効果を高めるために、動的URLから静的URLへの301リダイレクトを設定します。
5. セキュリティとパフォーマンスの考慮: .htaccessファイルへのアクセス権限やルール数に注意することで、サーバーの安全性とパフォーマンスを維持できます。
関連記事: