sql >> データベース >  >> RDS >> Mysql

URLで渡された値を使用してデータベースにクエリを実行し、mod_rewriteを使用してクエリの結果をURLに書き込むことは可能ですか?

    可能ですが、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 スクリプト、両方の idを確認します および名前名前がある場合 、それをIDに変換するために、データベースルックアップを実行します。管理がはるかに簡単で、サーバー/仮想ホストの構成アクセス権を持っている必要はなく、リライトマップを使用して問題を複雑にすることもありません。




    1. データベース設計:1つのテーブルまたは2つ?

    2. 無限のPHPwhileループ

    3. 同じテーブルから異なる値の複数の行を選択します

    4. SQLServer2005のアトミックUPSERT