Apache で mod_rewrite を使用して内部リダイレクトを実行する方法
この記事と次の記事では、mod_rewrite を使用して、特定の HTTP リクエストを Web サイト内の他のページまたは外部 URL にマップする方法について説明します。
言い換えれば、このよく知られた Apache モジュールを使用すると、URL を別の URL にリダイレクトできるようになります。これについては、実際の例で説明します。
推奨読書: Apache Web サーバーのパフォーマンスを向上させる 5 つのヒント
注: 以下の例は、Perl 互換正規表現 (PCRE) に少なくともある程度慣れていることを前提としています。このトピックはこの記事の範囲外であるため、PCRE の詳細については、Perl 5 バージョン 24.0 のドキュメントを参照してください。
続行する前に、書き換えモジュールがロードされていることを確認してください。これはCentOS および同様のディストリビューションではデフォルトの動作ですが、Debian および派生バージョンでは次のように手動でロードする必要があります。
a2enmod rewrite
mod_rewrite モジュールを使用するための Apache の構成
わかりやすくするために、CentOS 7 ボックスのデフォルト サイト (IP 192.168.0.100) を使用して、mod_rewrite (ドキュメントルート: /var/www/html、設定ファイル: /etc/httpd/conf/httpd.conf)。
Apache でこのモジュールを使用するには、構成ファイルに次の行を追加します。
RewriteEngine on
この構成は、同じボックス内の仮想ホストには継承されないことに注意することが重要です。
したがって、書き換えルールを使用する仮想ホストごとにRewriteEngineを追加する必要があります。
内部リダイレクト: URL を同じ仮想ホスト内の別の URL にマッピングする
内部リダイレクトはmod_rewrite の最も単純な例です。 default.aspx に対するすべてのリクエストを index.html にリダイレクトする場合は、RewriteEngine の下に次の行 (書き換えルールとも呼ばれます) を追加します。 > に:
RewriteRule "^/default\.aspx$" "/index.html"
変更を有効にするために、Apache を再起動することを忘れないでください。
これは、サイトが元々 ASP を使用して設計され、後でプレーンな HTML5 に変更された場合に便利です。検索エンジンでは .aspx
ファイルのインデックスが作成されますが、そのファイルはもう存在しません。
その場合、見込み客がエラー ページに遭遇しないように、リクエストをリダイレクトする方法を見つける必要があります。テストするには、次の内容を含む index.html
という名前の単純な HTML ファイルを /var/www/html 内に作成してみましょう。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>New site</title>
</head>
<body>
<h2>Default.aspx was here, but now it's index.html</h2>
</body>
</html>
キャレットとドル記号を使用すると、正規表現は /default
で始まり .aspx
で終わる任意の文字列と一致します。 >、それぞれ。
推奨事項: Mod_Pagespeed をインストールして Apache のパフォーマンスを最大 10 倍高速化する
次に、ブラウザを起動し、192.168.0.100/default.aspx を指定します。予想どおりに進む場合は、Apache が代わりに index.html
を提供するはずです。
ただし、エンド ユーザーにはアドレス バーに default.aspx
が表示され、変更が完全に透過的に行われます。
アドレス バーの URL で、実際にサーバーが default.aspx
という名前のページではなく index.html
を提供していることを示したい場合は、 [R, L]
を次のように書き換えルールの最後に追加します。
RewriteRule "^/default\.aspx$" "/index.html" [R,L]
ここで、[R,L]
は、ブラウザ (R)
に完全な HTTP リダイレクトを発行する必要があり、それ以上のルールを処理する必要がないことを示す 2 つのオプションのフラグです。
アドレス バーに、以前のように default.aspx
ではなく、予想どおり index.html
が表示されるようになったことに注目してください。
まとめ
この記事では、mod_rewrite を使用して内部リダイレクトを実行する方法を説明しました。次回の投稿にご期待ください。そこでは、別のサーバーに移動されたリソースにリダイレクトする方法と、ユーザーのブラウザに基づいてカスタム コンテンツを表示する方法を学びます。それまでは、使用可能な書き換えフラグの完全なリストについては、Apache 2.4 のドキュメントを参照してください。
いつものように、この記事に関してご質問やフィードバックがございましたら、下のコメント フォームをご利用ください。お返事おまちしております!