3

簡単な.htaccessファイルがあります。

RewriteEngine on
RewriteRule ^(.+)-([0-9]+)\.html$ book.php?title=$1&id=$2
RewriteRule ^(.+)\.html$ search.php?search=$1

ユーザーが「php-for-dumies-10.html」と入力すると、「book.php?title = php-for-dummies&id=10」として提供されます。それはうまくいきます。

ユーザーが「phpbook.html」と入力すると、「search.php?search=phpbook」として提供されます。それもうまくいきます。

問題は、ユーザーが「 book.php?title = directory / php-for-dumies&id =10」を期待どおりに取得する代わりに「 directory/php-for-dumies-10.html」(URLにディレクトリを追加)を入力した場合です。 、「search.php?search = book.php/php-for-dumies-10」を取得しています

最初のRewriteRuleの代わりに2番目のRewriteRuleが実行されるのはなぜですか?スラッシュを追加しているからですか?さらに重要なのは、「book.php /php-for-dummies-10」パラメーターはどこから来ているのでしょうか。

助けてくれてありがとう。

4

1 に答える 1

2
RewriteEngine on
RewriteRule ^(.+)-([0-9]+)\.html$ book.php?title=$1&id=$2 [L]
RewriteRule ^(.+)\.html$ search.php?search=$1 [L]

実際には、両方の書き換えが実行されています。[L]フラグを追加することにより、後続のルールが実行されないようにします。これにより、最初のルールのみが一致した場合に強制的に実行されます。

于 2012-12-05T18:16:46.923 に答える