web-dev-qa-db-ja.com

mod_rewrite RewriteCond-ドメイン部分だけにNCフラグが必要ですか?そしてさらに

私はhtaccessでこれらのタイプのルールを何度も見ました:

RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]

または

RewriteCond %{HTTP_Host} !^www\.domain\.it$ [NC]

ドメイン部分のみをチェックするとき、なぜNCフラグが必要なのですか?

ブラウザは常にドメイン名の大文字を小文字に変換するに気づいたので、この場合[NC]フラグが何のために役立つかわかりません。

URLの残りの部分をチェックすると、Unixシステムで[NC]フラグの必要性を理解していますwww.domain.com/index.htmlwww.domain.com/INDEX.HTMLとは異なるファイルですが、NCの必要性がわかりませんRewriteRuleでドメイン部分のみをチェックするときにフラグを立てます。


上記を読むのに時間がかかったので、マイナーな質問も1つ聞かせてくださいNCフラグに直接関係していませんが、RewriteCondに関係しています

上記のRewriteCondは両方ともうまく機能しますが、ドットの前にスラッシュがあるものだけが機能すると思いました(!^www\.domain\.it$スラッシュのないドットは 'any char'正規表現では、\.はドット文字を意味しますが、驚いたことに、他の文字もうまく機能します。理由を知っていますか?

34
Marco Demaio

[NC]を持つことは絶対に必須ではありませんが、ドメインのマッチングに使用することをお勧めします。最近のブラウザはドメイン名を小文字に変換しているかもしれませんが、古いブラウザやwgetcurlなどのコマンドラインユーティリティはどうでしょうか。したがって、クライアントが小文字のドメイン名を送信し、[NC]

2番目の質問について.任意の文字に一致するため、www.domain.comに一致しますが、一致したくないwww-domain-comテキストにも一致します。したがって、www\.domain\.comを使用することをお勧めします

39
anubhava

NC = nocaseは、着信リファラーのトラフィックが特定のパターンと一致するかどうかを意味します。

Apache [NC | nocase]フラグ を参照してください

8
Yarob Al-Taay

私は[NC]を確実に知りませんが、いくつかのありそうもない出来事でENV varがあると思います。大文字の文字を含めることができます。

正規表現のドットは、1文字、任意の文字を意味します。 SO文字列が http:// www_domain-it または http:// wwwadomain1it の場合、最初の条件も一致します

3
sauerburger