0

私は次のコードを持っています:

RewriteRule ^(feedback|contact)/? /contact-us\.php?ct=$1 [L]

インターネットサーバーエラーを返しているのはなぜですか?

しかし、私が削除する|contactと、それは動作します。

作業コード:

RewriteRule ^(feedback)/? /contact-us\.php?ct=$1 [L]

なぜそれが機能するのか、以前は機能しないのですか?

4

2 に答える 2

2

次のようなURIで無限ループ(コード500)が発生する理由/contact/:RewriteRuleで次の正規表現を照合しているため:

^(feedback|contact)/?

次に、一致したURIを次の宛先に内部的に転送します。

/contact-us.php?ct=contact

あなたが見ることができるものは再びあなたの正規表現と一致します:^(feedback|contact)/?そしてあなたのルールは再びにリダイレクトされ/contact-us.php?ct=contactます。この照合と転送は、書き換え制限に到達してApacheがエラーをスローするまで続行されます。

このループを回避するには、次のルールを使用する必要があります。

RewriteRule ^(feedback|contact)(/.*|)$ /contact-us.php?ct=$1 [L,QSA,NC]

上記のルールは、次のURIに一致します。

/contact
/contact/
/contact/foo
/contact/foo/bar
...

ただし、URIとは一致しません/contact-us.php。したがって、無限ループが防止されます。

于 2013-03-09T07:43:33.017 に答える
0

あなたが試すことができます:

^(feedback|contact).*? /contact-us\.php?ct=$1 [L]

これは2つの選択肢に一致します。

于 2013-03-08T21:30:03.350 に答える