1

apache書き換えルールの正規表現の何が問題になっているのかわかりません。

RewriteRule ^(.*)\/?$ $1.php?%1 [L]

URL http://mysite.com/page1/にアクセスすると、エラーが発生します。ただし、書き換えルールの正規表現を次のように変更すると、

RewriteRule ^(.*)\/$ $1.php?%1 [L]

URLhttp ://mysite.com/page1/は完全に正常に機能します。疑問符は前のパターンの0または1つの一致を意味すると思いました。疑問符が記載どおりに機能しないのはなぜですか?

4

2 に答える 2

2

正規表現^(.*)\/?$は実際には任意の文字列に一致します—「任意の文字列の後にスラッシュが続くか、またはスラッシュが続かないか」を求めています。したがって、スラッシュがオプションの場合、要求は無限の書き換えループに変わります。おそらく、すでにで終わるRewriteCondリクエストを除外する必要があります。.php

于 2012-09-02T19:41:27.187 に答える
0

もう少し説明させてください。

  1. 最初に/page1/をpage1.php?somethingに書き換えます。
  2. [L]は言う:「ここで止めて、新しいURLで書き直しを再開してください」
  3. 2番目のパスは/page1.phpをpage1.php.php?somethingに書き換えます
  4. 等々...
于 2012-09-02T19:57:16.730 に答える