0

.htaccessルールにカスケードの問題があります。次のことを考慮してください。

RewriteEngine on

RewriteRule ^product/(.*)$  product.php  [L,QSA]
RewriteRule ^(.*)$          index.php    [L]

上記の場合、 http://example.com/product/product-slugのようなURLをリクエストした場合、リクエストはproduct.phpにルーティングされると思います。ただし、そうではありません。私のindex.phpスクリプトがリクエストを取得します。

RewriteRule私は最初のものが一致するだろうと思っていたでしょう、そしてそれはL(最後の)フラグを持っているのでRewriteRule、下部の「キャッチオール」のものを含めて、それ以上一致しないでしょう。

なぜこれが期待どおりに機能しないのですか?

4

3 に答える 3

2

これはそれをソートする必要があります:

RewriteRule ^product/(.*)$ product.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !product.php
RewriteRule ^.*$ index.php [L]

問題は、ルールが異なるセットにあったため、つまり条件が添付されていなかったため、現在のルールのセット (最初のルール) の処理を​​停止し、2 番目のルールにジャンプしたことです。

それがすべて解決することを願っています:)

于 2012-12-12T14:24:16.747 に答える
1

おそらくあなたのコードのタイプミス?あなたはあなたの質問に「http://example.com/products/」と書いていますが、あなたがターゲット^product$にしているコードには、sはありません。

また、最初のルールは厳しすぎます。http://example.com/product/にのみ一致します。製品スラッグを取得できるようにするには、製品の後にワイルドカードを含める必要があります。のようなものRewriteRule ^products/(.*)$ product.php [L,QSA]が動作するはずです。

于 2012-12-12T13:41:42.510 に答える
0

それはあなたがルールを置いた順序のためではありませんか? 下のものは、その上のものへの変更を上書きします。それらを変えてみてください。

また、RewriteBase を設定する必要がありますか? あなたのプロジェクトは実際のドメインにありますか、それともサーバー ルートのサブディレクトリにローカルに保存されていますか?

于 2012-12-12T14:07:16.720 に答える