【解決方法】PHP での URL 書き換え

プログラミングQA

[ad_1]

私は php で開発されたサイトを持っており、今はそれを立ち上げようとしていますが、URL をユーザーフレンドリーにしたいだけです。 私のサイトは動的で、動的に作成されるリンクには URL にクエリ文字列が含まれているため、どうすればユーザー フレンドリーな URL にできますか。

たとえば、私が与える私のURL 「あ」 タグのような http://www.example.com/product.php?product_name=abc_pqr&product_id=452

それからどうすればそれを作ることができますか

404 Not Found

.htaccess ファイルを使用して実行できることはわかっていますが、URL 書き換えについては非常に初心者であり、初心者のようです。

解決策 1

httpd.conf ファイルの LoadModule ディレクティブを使用して、mod_rewrite モジュールを Apache Web サーバー環境に動的にロードできます。 このファイルをテキスト エディターに読み込み、以下のような行を見つけます。

#LoadModule rewrite_module modules/mod_rewrite.so

# を削除してこの行のコメントを解除し、httpd.conf ファイルを保存します。 Apache サーバーを再起動します。問題がなければ、web サーバーで mod_rewrite モジュールが有効になります。

mod_rewrite を使用して最初の URL を書き換えましょう

これで、サーバーで mod_rewrite モジュールが有効になりました。 このモジュール自体をロードする方法と、それを機能させる方法を見てみましょう。

モジュールを動的にロードするには、.htaccess ファイルに 1 行追加する必要があります。 .htaccess ファイルは、Apache ディレクティブが定義された構成ファイルであり、Web サイトの分散ディレクトリ レベルの構成を提供します。 Web サーバーの test ディレクトリ (または URL 書き換えを有効にしたい他のディレクトリ) に .htaccess ファイルを作成し、以下の行を追加します。

RewriteEngine は

これで書き換えエンジンがオンになり、Apache が URL を書き換える準備が整いました。 サーバー レベルで first.html を second.html にリダイレクトするようサーバーに要求するための書き換え命令の例を見てみましょう。 前に追加した RewriteEngine ディレクティブとともに、以下の行を .htaccess ファイルに追加します。

RewriteRule ^first.html$ second.html

ここで行ったことについては次のセクションで説明しますが、すべてがうまくいけば、サーバーで行われた first.html へのリクエストはすべて second.html に転送されます。 これは、URL 書き換えの最も単純な形式の 1 つです。

ここで注意すべき点は、リダイレクトがクライアントから完全に隠されていることであり、これは従来の HTTP リダイレクトとは異なります。 クライアントまたはブラウザには、second.html のコンテンツが first.html から取得されているという印象が与えられます。 これにより、Web サイトはクライアントの意識なしにその場で URL を生成でき、URL 書き換えが非常に強力になります。

mod_rewrite モジュールの基本

これで、.htaccess ファイルを使用して Web サイト全体または特定のディレクトリに対して mod_rewrite を有効にできることがわかり、前の例で基本的な rewrite ディレクティブを実行しました。 ここでは、最初のサンプルの書き換えで正確に何を行ったかを説明します。

Mod_rewrite モジュールは、URL 書き換え用の構成ディレクティブ ステートメントのセットを提供します。前のサンプルで見た RewriteRule ディレクティブが最も重要です。 mod_rewrite エンジンは、変換を行うためにパターン マッチング置換を使用します。これは、正規表現をよく理解することが大いに役立つことを意味します。

注: 正規表現は非常に膨大であるため、この記事の範囲には収まりません。 いつかそのトピックについて別の記事を書こうと思います。

1. RewriteRule ディレクティブ

RewriteRule の一般的な構文は非常に簡単です。 RewriteRule パターン置換 [Flags]

Pattern 部分は、リライト エンジンが受信 URL で検索してキャッチするパターンです。 最初のサンプルでは、​​^first.html$ がパターンです。 パターンは正規表現として記述されます。

置換は、URL でキャッチされたパターンに対して行われる置換または変換です。 このサンプルでは、​​second.html が Substitution 部分です。

フラグはオプションであり、URL 文字列の置換だけでなく、特定の他のタスクを書き換えエンジンに実行させます。 存在する場合、フラグは角括弧で定義され、カンマで区切る必要があります。

より複雑な書き換えルールを見てみましょう。 以下の URL をご覧ください。

http://yourwebsite/articles.php?category=stamps&id=122

次に、上記の URL を、以下に示すような検索エンジンとユーザー フレンドリな URL に変換します。

http://yourwebsite/articles/stamps/122

次のコードを使用して、articles.php というページを作成します。

$category = $_GET[‘category’];
$id = $_GET[‘id’];
echo “カテゴリ: ” . $カテゴリ . ” “;
エコー “ID: ” . $id;
このページは、渡された 2 つの GET 変数を Web ページに出力するだけです。

.htaccess ファイルを開き、以下のルールを記述します。

RewriteEngine は
RewriteRule ^articles/(\w+)/([0-9]+)$ /articles.php?category=$1&id=$2

パターン ^articles/(\w+)/([0-9]+)$ は次のように二等分できます。

^articles/ – リクエストが「articles/」で始まるかどうかを確認します

(\w+)/ – この部分が単一の単語の後にスラッシュが続くかどうかを確認します。 括弧は、置換された URL で実際のクエリ文字列に置き換えるために必要なパラメーター値を抽出するために使用されます。 括弧内に配置されたパターンは、括弧の各ペアに対して $1、$2 などの変数を使用して、置換部分で逆参照できる特別な変数に格納されます。

([0-9]+)$ – URL の最後の部分の数字をチェックします。

以下の URL を使用して、テスト サーバーの article.php ファイルをリクエストしてみてください。

http://yourwebsite/articles/coins/1222

作成した URL 書き換えルールが有効になり、URL が要求されたかのように結果が表示されます。

http://yourwebsite/articles.php?category=coins&id=1222

このサンプルを使用して、より複雑な URL 書き換えルールを作成できます。 上記の例で URL 書き換えを使用することにより、検索エンジンとユーザー フレンドリな URL を実現しました。これは、カジュアルなスクリプト キディ インジェクションのような攻撃に対する改ざん防止でもあります。

RewriteRule ディレクティブの Flags パラメータは何をしますか?

RewriteRule フラグは、mod_rewrite が各ルールを処理する方法を制御する方法を提供します。 これらのフラグは、コンマで区切られた共通の角括弧のセット内で定義され、約 15 のフラグから選択できます。 これらのフラグは、ルールが解釈される方法を制御するものから、パターンで一致が見つかったときに特定の HTTP ヘッダーをクライアントに送り返すものなどの複雑なものにまで及びます。

[ad_2]

コメント

タイトルとURLをコピーしました