注: ここでは、問題を簡単に説明するためにコードをサニタイズしていません。私の製品コードは、処理する前に $_GET をサニタイズします。
ここに私の .htaccess ファイルがあります:
RewriteEngine on
RewriteCond %{REQUEST_URI} "/files/"
RewriteRule (.*) $1 [L]
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L]
RewriteRule ^(.*) ?cat=$1
これが私のPHPファイルです:
$cat = $_GET['cat'];
$title = $_GET['title'];
if($cat && !$title) {
echo 1;
}
if($cat && $title) {
echo 2;
}
次のテスト URL にアクセスした場合: http://local.testzone.com/cat/titleまたはhttp://local.testzone.com/cat
500 内部サーバー エラーが発生します。
.htaccess ファイルの最後の行をコメントすると、次のようになります。
#RewriteRule ^(.*) ?cat=$1
http://local.testzone.com/catは私に与えます:
見つかりません
要求された URL /cat は、このサーバーで見つかりませんでした。
http://local.testzone.com/cat/titleは私に与えます:
2
猫とタイトルが存在する場合、私のphp echo 2によると、これは何をすべきかです。
私の質問は、アクセスファイルを変更して、猫だけがいる場合に 1 をエコーするようにするにはどうすればよいですか? これを行う唯一の方法は、次のように最初のレベルを手動で設定することです。
RewriteRule ^cat$ ?cat=cat
これは機能しますが、私が書いているアプリケーションでは機能しません。URL の cat 値に基づいてデータベースにクエリを実行する必要があります。cat の値は動的に変更される可能性があり、htaccess ファイルにハード コードすることはできません。タイトルは正常に機能していますが、猫の部分を機能させるにはどうすればよいですか?
私のリクエストが明確であることを願っています。