開発者ドキュメント

Ubuntu14.04でApache用にmod_rewriteを設定する方法

序章

このチュートリアルでは、Apache2を使用してURL書き換えをアクティブ化し、管理する方法を学習します。 mod_rewrite モジュール。 このツールを使用すると、URLをよりクリーンな方法で書き換えて、人間が読める形式のパスをコードに適したクエリ文字列に変換できます。

このガイドは2つに分かれています。1つ目はサンプルWebアプリケーションをセットアップし、2つ目は一般的に使用される書き換えルールについて説明しています。

前提条件

このチュートリアルに従うには、次のものが必要です。

ステップ1—Apacheをインストールする

このステップでは、組み込みのパッケージインストーラーを使用します。 apt-get. 管理が大幅に簡素化され、クリーンなインストールが容易になります。

まず、システムのパッケージインデックスを更新します。 これにより、古いパッケージや古いパッケージがインストールに干渉しないようになります。

  1. sudo apt-get update

Apache2は前述のHTTPサーバーであり、世界で最も一般的に使用されています。 インストールするには、次のコマンドを実行します。

  1. sudo apt-get install apache2

最も人気のある2つのオープンソースWebサーバーであるNginxとApache2の違いについては、この記事を参照してください。

ステップ2—mod_rewriteを有効にする

今、私たちはアクティブ化する必要があります mod_rewrite.

  1. sudo a2enmod rewrite

これにより、モジュールがアクティブ化されるか、モジュールがすでに有効になっていることを警告します。 これらの変更を有効にするには、Apacheを再起動します。

  1. sudo service apache2 restart

ステップ3—.htaccessを設定する

このセクションでは、 .htaccess より簡単な書き換えルール管理のためのファイル。

A .htaccess fileを使用すると、サーバー構成ファイルにアクセスせずに書き換えルールを変更できます。 このために、 .htaccess Webアプリケーションのセキュリティにとって重要です。 ファイル名の前のピリオドは、ファイルが非表示になるようにします。

開始する前に、さらにいくつかの設定をセットアップして保護する必要があります。

まず、変更を許可します .htaccess ファイル。 を使用してデフォルトのApache設定ファイルを開きます nano またはお気に入りのテキストエディタ。

  1. sudo nano /etc/apache2/sites-enabled/000-default.conf

そのファイルの中には、 <VirtualHost *:80> 1行目のブロック。 そのブロック内に、次のブロックを追加します。

/etc/apache2/sites-available/default
<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>

これで、ファイルは次のように一致するはずです。 すべてのブロックが適切にインデントされていることを確認してください。

/etc/apache2/sites-available/default
<VirtualHost *:80> <Directory /var/www/html> . . . </Directory> . . . </VirtualHost>

これらの変更を有効にするには、Apacheを再起動します。

  1. sudo service apache2 restart

次に、を作成します .htaccess ファイル。

  1. sudo nano /var/www/html/.htaccess

新しいファイルの先頭にこの最初の行を追加して、 RewriteEngine.

/var/www/html/.htaccess
RewriteEngine on

ファイルを保存して終了します。

他のユーザーがあなたの読み取りのみを行えるようにするため .htaccess、次のコマンドを実行して権限を更新します。

  1. sudo chmod 644 /var/www/html/.htaccess

これで運用が可能になりました .htaccess ファイル、Webアプリケーションのルーティングルールを管理します。

ステップ4—ファイルの設定

このセクションでは、基本的なURL書き換えを設定します。これにより、きれいなURLが実際のコードへのパスに変換されます。 具体的には、ユーザーがアクセスできるようにします example.com/about.

まず、という名前のファイルを作成します about.html.

  1. sudo nano /var/www/html/about.html

次のコードをHTMLページにコピーします。

/var/www/html/about.html
<html> <head> <title>About Us</title> </head> <body> <h1>About Us</h1> </body> </html>

次のWebアプリケーションにアクセスできます。 your_server_ip/about.html また example.com/about.html. ここで、 about.html アクセス可能です。 アクセスしようとすると your_server_ip/about NotFoundエラーが発生します。 ユーザーにアクセスしてもらいたい about 代わりは。 私たちの書き換えルールは、まさにこの機能を可能にします。

開く .htaccess ファイル。

  1. sudo nano /var/www/html/.htaccess

最初の行の後に、以下を追加します。

/var/www/html/.htaccess
RewriteRule ^about$ about.html [NC]

これで、ファイルは次のようになります。

/var/www/html/.htaccess
RewriteEngine on RewriteRule ^about$ about.html [NC]

おめでとう。 これでアクセスできます example.com/about あなたのブラウザで!

これは、すべての書き換えルールが従う一般的な構文を示す簡単な例です。

^about$ URLから照合される文字列です。 つまり、それは視聴者がブラウザに入力するものです。 この例では、いくつかのメタ文字を使用しています。

about.html ユーザーがアクセスする実際のパスです。 つまり、Apacheは引き続きサービスを提供します about.html ファイル。

[NC] URLの大文字と小文字を無視するフラグです。

上記のルールでは、次のURLがポイントします about.html:

以下はしません:

一般的なパターン

このセクションでは、一般的に使用されるディレクティブをいくつか示します。

これでWebアプリケーションが実行され、保護されたものによって管理されます .htaccess ファイル。 最も単純な例は上に含まれています。 このセクションでは、さらに2つの例を検討します。

必要に応じて、結果パスにサンプルファイルを設定できますが、このチュートリアルにはHTMLファイルとPHPファイルの作成は含まれていません。 書き直しのルールだけです。

例1:RewriteRuleを使用したクエリ文字列の簡略化

全て RewriteRule■次の形式に従います。

RewriteRule pattern substitution [flags]

Webアプリケーションは、多くの場合、クエリ文字列を使用します。この文字列は、 ? 疑問符と区切り文字 & アンパサンド。 書き換えルールを照合する場合、これらは無視されます。 ただし、ページ間でデータを渡すためにクエリ文字列が必要になる場合があります。 たとえば、PHPで記述された検索結果ページは、次のようなものを利用する場合があります。

http://example.com/results.php?item=shirt&season=summer

この例では、これを単純化して次のようにします。

http://example.com/shirt/summer

例1A:単純な交換

書き換えルールを使用すると、次のように使用できます。

/var/www/html/.htaccess
RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer

上記は実際にマップするので、かなり自明です shirt/summerresults.php?item=shirt&season=summer. これにより、目的の効果が得られます。

例1B:マッチングオプション

ただし、これを一般化してすべての季節を含めたいと思います。 したがって、次のことを行います。

書き換えルールは次のようになります。

/var/www/html/.htaccess
RewriteRule ^shirt/(summer|winter|fall|spring) results.php?item=shirt&season=$1

上記のルールは、次のURLと一致します。 shirt/ 指定された季節が続きます。 そのシーズンはを使用してグループ化されます () その後、 $1 次のパスで。 これは、たとえば、次のことを意味します。

http://example.com/shirt/winter

になります:

http://example.com/results.php?item=shirt&season=winter

これにより、目的の効果も得られます。

例1C:文字セットのマッチング

ただし、URLだけでなく、あらゆる種類のアイテムを指定したいと思います。 /shirt. したがって、次のことを行います。

/var/www/html/.htaccess
RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2

上記は、たとえば次のように変換されます。

http://example.com/pants/summer

に:

http://example.com/results.php?item=pants&season=summer

例1D:クエリ文字列の受け渡し

このセクションでは、新しい概念を紹介しませんが、発生する可能性のある問題に対処します。 上記の例を使用して、リダイレクトしたいとします http://example.com/pants/summer ただし、追加のクエリ文字列を渡します ?page=2. 以下をお願いします。

http://example.com/pants/summer?page=2

マップする場所:

http://example.com/results.php?item=pants&season=summer&page=2

現在の設定で上記のURLにアクセスしようとすると、クエリ文字列が見つかります page=2 迷った。 これは、追加のを使用して簡単に修正できます QSA 国旗。 以下に一致するように書き換えルールを変更すると、目的の動作が実現されます。

/var/www/html/.htaccess
RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]

例2:ロジックを使用した条件の追加

RewriteCond 書き換えルールに条件を追加しましょう。 全て RewriteCond■次の形式に従います。

RewriteCond TestString Condition [Flags]

もし RewriteCond 真と評価され、 RewriteRule 直後が考慮されます。

例2A:デフォルトページ

架空の管理パネルでは、404でユーザーに挨拶するのではなく、すべての不正な形式のURLをホームページに戻すことができます。 条件を使用して、要求されたファイルが存在するかどうかを確認できます。

/var/www/html/.htaccess
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^admin/(.*)$ /admin/home

これは次のようなものをリダイレクトします /admin/blargh/admin/home.

上記で:

より構文的および技術的に正しいアプローチは、404を定義することであることに注意してください。 ErrorDocument.

/var/www/html/.htaccess
ErrorDocument 404 /error.html

例2B:IPアクセス制限

これは他の方法を使用して達成することもできますが、 RewriteCond 1つのIPまたはIPアドレスのコレクションへのアクセスを制限するために使用できます。

この例では、を除くすべての場所からのトラフィックをブロックします12.34.56.789。

/var/www/html/.htaccess
RewriteCond %{REMOTE_ADDR} !^(12\.34\.56\.789)$ RewriteRule (.*) - [F,L]

この例は、古いmod_rewrite記事からの例3の否定です。 ステートメント全体には、「アドレスが not 12.34.56.789の場合は、アクセスを許可しないでください」と記載されています。

要するに:

ブロック12.34.56.789が必要な場合は、代わりに次を使用してください。

/var/www/html/.htaccess
RewriteCond %{REMOTE_ADDR} ^(12\.34\.56\.789)$ RewriteRule (.*) - [F,L]

元の記事のパート1パート2で、より多くの書き換えルールとホットリンクを防ぐ方法を見つけることができます。

結論

mod_rewrite 人間が読めるURLを確保するために効果的に使用できます。 The .htaccess ただし、ファイル自体には、このモジュールだけでなく多くの用途があります。その機能を拡張するために、他の多くのApacheモジュールがインストールされている可能性があることに注意してください。

の機能を詳しく説明している他のリソースがあります mod_rewrite:

mod_rewrite はWebアプリケーションのセキュリティにとって重要なモジュールですが、リダイレクトループが発生したり、どこにでもある、あいまいな状態になることがあります。 500 forbidden エラー。 デバッグのヒントについて .htaccessこのStackOverflow投稿を参照してください。

書き換えルールは正規表現で記述されています。 エキスパートになるには、この正規表現に関するすべてのチュートリアルを参照してください。

正規表現パターンをすばやく分析するために、オンラインデバッガーを使用して、正規表現パターンの即時フィードバックとライブ解釈を提供できます。

モバイルバージョンを終了