2017-01-06 5 views
2

私はここに三つの条件を持っていますが、彼らは同じ仕事をするので、私は本当の違いを見つけることができません。mod_rewrite - RewriteCond - なぜ比較構文が必要ですか?

RewriteCond %{HTTPS} !=on 

RewriteCond %{HTTPS} =off 

RewriteCond %{HTTPS} off 

このサイト(http://httpd.apache.org/docs/current/mod/mod_rewrite.html)は言う:

構文:RewriteCond TestString CondPattern [flags]

CondPatternは通常perl互換の正規表現ですが、Teststringに対して他の有用なテストを実行するための構文があります:

条件自体に正規表現と比較するタスクがある場合、なぜ比較構文を追加する必要がありますか?

答えて

0

比較構文は必要ありません。これらのテストのための最も簡単な構文は次のとおりです。

RewriteCond %{HTTPS} on 

または:

RewriteCond %{HTTPS} off 

あなたが=を使用したい場合は、次のことができ、それはそれとして、代わりに正規表現として処理するのストレート比較だ意味します毎:

=コンコードパターンは略語です。 CondPatternをプレーンな文字列として扱い、辞書的にTestStringと比較します。 Trueの場合 TestStringは辞書順にCondPatternと等価です(2つの文字列 は文字のための文字です)。 CondPatternが ""(2つの の引用符)の場合、これはTestStringと空の文字列を比較します。

比較演算子は、the various other tests that can be done with RewriteCondのために単独で表示されます。

mod_rewriteは強力で柔軟なシステムであるため、これらのオプションが必要です。比較のためのこれらのオプションを持つことは、そのユーティリティを増やし、正規表現単独よりも多くの可能性を開く。また、読みやすさを向上させる方法も提供しています。たとえば、=/specific/URL.htmlは、^/specific/URL\.html$より後で読みやすく、置き換えが容易です。私がリンクしているページの情報をチェックすると、ファイル比較、より小さい/大きい、小さい、等しい、より大きい、等しいなど、多くのオプションのうちの1つにすぎません。これらのすべては、ルール(最初に処理される)からのキャプチャに対して実行でき、条件、サーバー変数、特殊変数(HTTPSなど)、さらにはカスタムマッピングから取得できます。

regexes以外のこれらのオプションを使用すると、正規表現だけでは存在しない可能性がすべて開かれます。はい、正規表現が利用可能なときにはまっすぐな比較は不要だと見なすことができますが、システムのより大きな文脈を取り入れることで、正規表現ではできない、上記のように単純な比較のための構文を単純化する場合もあります。あなたのHTTPSの例はちょうど非常に単純なケースであり、分離されているとオプションが不要に見えることがあります。

+0

ここはexcatly私の問題です。文自体がテスト文字列をcondpatternと比較/一致させる場合、なぜ "等号"のような比較のために追加の記号が必要なのでしょうか? – Masi

+0

具体的な対応に私の答えが更新されました。 – SuperDuperApps

+0

あなたのexplainationに感謝します。私の場合は、等号を使う方が良いと言えますか?パフォーマンスの違いはありますか?一般的に何が良いですか? – Masi

関連する問題