1

すべてをindex.phpにリダイレクトしたいので、これでうまくいくと思いました:

RewriteEngine on
RewriteRule ^(.*)$ /index.php?url=$1 [L]

..しかし、そうではありません。ただし、この非常によく似た RewriteRule は機能します。

RewriteEngine on
RewriteRule matches/(.*) /index.php?url=$1 [L]

後で、最初のものを機能させるには次のことが必要であることがわかりました。

RewriteCond %{REQUEST_FILENAME} !-f

前者の例では最後の RewriteCond が必要で、後者では必要ない理由を説明してもらえますか?

4

1 に答える 1

3

最初のルールは、既に書き換えられた URL を書き換えるためです。

RewriteRule Last [L] フラグが機能しない?

例えば:

  • 元のリクエスト:/hello/pink-kitten
  • 最初の(最初の)書き換え:/index.php?url=hello/pink-kitten
  • 2サイクル目: に書き換え/index.php?url=index.php
  • 3 サイクル目: に書き換え/index.php?url=index.php
  • 3 回目のサイクルで 2 回目と同じ結果が得られたため、これ以上のサイクルはありません

その条件を追加すると、ルールが機能するのはなぜですか? 条件が明確に述べているため、要求された URL がファイルでない場合にのみ書き換えます。したがって、2 サイクル目では URL は/index.phpファイルのように再度書き換えられることはないため、これ以上のサイクルはありません。

2番目のルールがそのように機能するのはなぜですか? 既に条件が組み込まれているため -- URL が含まれている必要があり、ご覧のようにmatches/書き換えられたURL は含まれていません。/index.php?url=matches/

于 2012-04-26T15:17:05.490 に答える