4

mod_rewrite を使用して、url パラメーター値を取る htaccess ルールを作成することは可能ですか (例: id=1、ここで「id」はパラメーター、「1」はパラメーター値)、パラメーター値を使用してデータベースにクエリを実行することは可能ですか?指定し、要求されたページの URL の一部としてクエリから返された値を書き込みますか?

mod_rewrite の基本を知っています。たとえば、次のように表示される URL を書き換えます。

www.example.com/item.php?id=1

以下に:

www.example.com/item/1

私が必要とするものの例は、次のURLを書くことです:

www.example.com/item.php?id=1

これに:

www.example.com/item/name-of-item-based-on-id-specified-in-original-url

ただし、mod_rewrite を使用して実行しようとしていることが可能かどうかはわかりません。

誰かがこの問題の解決策を持っている場合は、私を助けていただければ幸いです。私がやろうとしていることが htaccess と mod_rewrite を使用して不可能な場合、誰かがこの問題を解決する方法を教えてもらえますか?

4

1 に答える 1

4

可能ですが、RewriteMapを使用して、 内で使用できるマッピングを定義する必要がありますRewriteRule

Apache バージョン 2.2 はデータベースに直接アクセスできないため、実際のクエリを実行して結果を返すスクリプトを作成する必要があります。このマップは、「外部書き換えプログラム」を使用して定義できます。

したがって、stdin から「cats」を取得し、データベースにクエリを実行して「1」を返すスクリプトがある場合は、次のように定義します。

RewriteMap item_lookup prg:/path/to/item_lookup.php

そのディレクティブはサーバーまたは vhost 構成にある必要があり、htaccess ファイルにあることはできません。ただし、htaccess ファイルでマッピングを使用できます。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

したがって、これは URI/catsを受け取り、それを に書き換え/item.php?id=1ます。

Apache 2.4 を使用している場合は、「DBD」マップを利用できます。外部スクリプトを使用しなくても、マップ定義に直接クエリを挿入できます。同じように使用します。

RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"

次に、同じ方法で使用します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

DBD/FastDBD クエリを使用せずに、item.phpとにかく 2 番目の外部スクリプトですべての作業を複製することになるため、. 次のようなものを追加するだけです:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^item/([0-9]+)$ /item.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)$ /item.php?name=$1 [L]

item.phpスクリプトで、idnameの両方を確認します。nameがある場合は、データベース ルックアップを実行して ID に変換します。管理がはるかに簡単で、サーバー/仮想ホスト構成にアクセスする必要がなく、書き換えマップを使用することで問題が複雑になることもありません。

于 2013-09-04T19:00:49.200 に答える