1

注: ここでは、問題を簡単に説明するためにコードをサニタイズしていません。私の製品コードは、処理する前に $_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 ファイルにハード コードすることはできません。タイトルは正常に機能していますが、猫の部分を機能させるにはどうすればよいですか?

私のリクエストが明確であることを願っています。

4

1 に答える 1

0

一部のルールをクリーンアップできますが、ルールがループしないように条件を追加する必要があります。書き換えエンジンは、URI の変更が停止するまで (または、内部の再帰制限に達して 500 エラーが発生するまで)、ルールを介してリクエスト URI を継続的に実行します。

RewriteEngine on

RewriteRule ^/?files/ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) ?cat=$1
于 2013-05-02T23:39:12.480 に答える