Mod_Rewriteについて

前回ショッピングサイトにアクセスしたときのことを考えて、購入する必要のある特定のものを1つ探します。 最終的にページに到達したとき、URLは次のようになっている可能性があります。

gizmo.com/latest_and_greatest/specific_gadgets/exactly_what_youre_looking_for

これは、このWebサイトが購入に必要なすべてのディレクトリを設定するのに時間がかかったためではなく、Mod_Rewriteと呼ばれる便利なモジュールのためです。 Mod_Rewriteを使用すると、必要に応じてカスタムURLと簡略化URLを作成できます。 実際には、実際のURLはこれに近いように見えた可能性があります。

http://www.gizmo.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

このチュートリアルでは、Mod_Rewriteのアクティブ化、必要な.htaccessページの作成と使用、およびURL書き換えの設定について説明します。

コンテンツ

  1. Mod_Rewriteをアクティブ化する方法
  2. .htaccessファイルを作成して使用を許可する方法
  3. 書き換えルールの使用方法
  4. RewriteCondディレクティブの使用方法
  5. 資力

設定

このチュートリアルの手順では、ユーザーがroot権限を持っている必要があります。 手順3と4で、Ubuntuここで設定する方法を確認できます。

さらに、サーバーにapacheをインストールする必要があります。 お持ちでない場合は、次のコマンドを使用してUbuntu用にダウンロードできます。

sudo apt-get install apache2

セクション1-Mod_Rewritesをアクティブ化する方法

実際のURL書き換えの生成を開始する前に、それらを制御するapachemod_rewriteモジュールをアクティブ化する必要があります。 これは簡単です:

sudo a2enmod rewrite

このコマンドはモジュールをアクティブにします。または、すでにアクティブになっている場合は、「モジュールの書き換えはすでに有効になっています」という文字を表示します。

セクション2— .htaccessファイルについて:

モジュールがアクティブ化されたら、Webサイトディレクトリに.htaccessファイルを作成して、URLの書き換えを設定できます。

.htaccessファイルは、サーバー構成ファイルを変更せずにWebサイトの詳細を構成する方法です。 ファイル名を開始する期間は、ファイルをフォルダー内に隠しておきます。

さらに、.htaccessファイルの配置も重要です。 そのファイルの構成は、そのディレクトリとその下のディレクトリのすべてに影響します。

テキストエディタで.htaccessファイルを作成し(他の拡張子や名前を付けずに.htaccessのみに名前を付けるようにしてください)、ftpクライアントを介してサイトにアップロードできます。

または、このコマンドを使用して、example.comをサイトの名前に置き換え、ターミナルに.htaccessファイルを作成することもできます。

sudo nano /var/www/example.com/.htaccess

.htaccessファイルの変更を許可する方法:

.htaccessファイルが標準のWebサイト構成を上書きできるようにするには、構成ファイルを開くことから始めます。 注意:このステップにはsudo権限が必要です。

sudo nano /etc/apache2/sites-available/default

そのファイル内に入ったら、次のセクションを見つけて、AllowOverrideという行をNoneからAllに変更します。 セクションは次のようになります。

 <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
 </Directory>

そのファイルを保存して終了したら、apacheを再起動します。 .htacessファイルがすべてのサイトで利用できるようになります。

sudo service apache2 restart

これで、サイトのURLを書き換える準備が整いました。

セクション3—URLを書き換える方法

URLの書き換え操作全体は、.htaccessファイル内で行われます。

全体として、すべてのURL書き換えコマンドは同じパターンに従います。

 RewriteRule Pattern Substitution [OptionalFlags]

各部分の簡単な説明は次のとおりです。

  • RewriteRule:これは、使用するmod_rewriteディレクティブの名前を書き込むことができるセクションです。
  • パターン:このセクションは、正規表現を使用して、要求されたURLを解釈することに専念しています。 このチュートリアルには正規表現の説明は含まれていませんが、ここというテーマで役立つチュートリアルを見つけることができます。
  • 置換:これは、表示したい情報を含むページの実際のURLです。 PHPのパラメータや数字の長い文字列が原因で、覚えたり混乱したりするのは難しいかもしれません。 例えば。 www.cityzoo.com/animals.php?mammals=seals
  • オプションのフラグ:フラグは、式の動作を変更する可能性のあるRewriteRuleディレクティブの最後にあるタグです。 一般的なフラグには、[F]、URLを禁止する、[NC]、ルールに大文字と小文字を区別しないようにする、[R=301]または[R=302]、使用するリダイレクトコードを制御する、[L]は次のことを示します。これはシリーズの最後のルールです。

3つのURL書き換えの例:

例1:ページAに移動し、ページBを見つけます。

これは、URL書き換えの最も基本的な例です。サイトへの訪問者は、あるURLをブラウザに入力しますが、別のURLにリダイレクトされます。 設定方法は次のとおりです。

先に進んで、サイト用に2つの別々のページを作成しましょう。たとえば、1つはApple(apples.html)用、もう1つはOranges(oranges.html)用です。

コードをAppleページにコピーします。

<html>
  <head>
    <title>Apples</title>
  </head>
  <body>
    <h1>This page is about Apples</h1>
  </body>
</html>

その後、適切なものを参照するためにすべての果物の名前を置き換えて、オレンジ色のページを作成できます。

次に、.htaccessファイルを開きます。

sudo nano /var/www/example.com/.htaccess

次のURL書き換えコマンドをファイルに追加します。

RewriteEngine on
RewriteRule ^oranges.html$ apples.html

保存して終了。

すべてが整ったら、「/oranges.html」で終わるサイトにアクセスします。表示されるすべての情報は「/apple.html」サイトから取得されます。

今説明のために:

  • ^ oranges.html:これはページの開始方法を示します。 カレット(^)は、文字列の始まりを示します。 つまり、URLを書き換えたいページがオレンジ以外で始まっている場合(例:navel_oranges.html)、書き換えルールで認識されず、apples.htmlにリダイレクトされません。
  • $:ドル記号はURLの終わりを示します。 文字列の最後の文字の後に何かがある場合、Webページは書き換えルールによって同様に認識できなくなります。
  • apples.html:これはブラウザが実際にトラフィックを誘導している場所です。

例2:WebサイトのURLにパラメーターがあります。 サブディレクトリのように見せるための方法。

最初の例は、単に別のサイトに置き換える必要があるサイトに言及していました。 ただし、以下の例は、URLにパラメーターがある場合に見られる一般的なシナリオに対応しています。

このURLをチェックしてください:

http://example.com/results.php?products=apple

次のように表示すると、はるかに明確になります。

 http://example.com/products/apple

.htaccessファイル内の行は次のようになります。

RewriteEngine on
RewriteRule ^products/([A-Za-z0-9-]+)/?$ results.php?products=$1 [NC]

今説明のために:

  • ^ products:キャッチして再ルーティングするには、URLがproductsで始まる必要があります(これはドメイン名の後のテキストのみを参照することに注意してください)。 それ以外のもので始まる場合、ルールは適用されず、URLは同じままになります。
  • ([A-Za-z0-9-] +):括弧内の内容は、URLに入力できる情報を示しています。 つまり、URLは、サイトへの訪問者が/products/の後に入力した内容を反映するように書き換えられます。
  • +:プラス記号は、角かっこ内に1つ以上の文字を含めることができることを示します(たとえば、文字または数字のいずれかである単一の文字とは対照的です)。
  • /?$:ドル記号は文字列の終わりを示します。 疑問符を使用すると、文字列の最後の文字をスラッシュにすることができます(必須ではありませんが)。
  • results.php?products = $ 1:$ 1は、パターンの文字列をどこに配置するかを示します。 つまり、「([A-Za-z0-9-] +):」の部分に人々が書いたものからキャプチャされた情報を入れます。 プロセスが完了すると、ブラウザは2番目のURLからの情報を表示します
  • [NC]:これはフレーズの最後にあるフラグであり、ルールが文字列内のすべての文字の大文字小文字を無視する必要があることを示します。

例3:サイトに扱いにくいURLがあります。 それをきれいにする方法

この種の状況は、URLが長く複雑な場合に発生する可能性があります。

例として、以下のURLを取り上げます。

http://example.com/results.php?products=produce&type=fruit&species=apple

URLは正しいコンテンツを配信するのに効果的ですが、消費者にとってはあまり印象的ではありません。 URLを書き換えると、URLをより単純で明確なものに変換できます。

http://example.com/produce/fruit/apple

これを実現するには、.htaccessファイルに次の行が必要です(.htaccessファイルに必要な数のセクションを追加できます)。

RewriteEngine on
RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

今説明のために:

  • まず、^(caret)が式を開始します。
  • (肉|生産|乳製品):入力できるオプションを制限したい場合は、受け入れる値のみを指定できます。この場合は、さまざまな食料品です。 これらの3つのキーワードのいずれか以外のものが入力された場合、URLの書き換えは行われません。
  • ([^/。]+)は、スラッシュに続く文字(この場合はスラッシュまたはピリオド)以外に、スラッシュの間に何でも書き込むことができることを示します。
  • results.php?products = $ 1&type = $ 2&species = $ 3:括弧内の各値が抽出され、式の置換部分の長いURLに適用されます。 $ 1は最初の括弧、$ 2、2番目、$ 3、3番目を示します。

2ページに続く

EtelSverdlov著