それは、http:
とfoo.bar.com
としてhttp://foo.bar.com
を獲得、その後http:/foo.bar.com
で、任意の文字、.
を交換しています。間違いなく、そうですか?
右は間違いありません。 :)
このコードは、URLパスに一緒に現れる複数のスラッシュを1つのスラッシュに減らします。したがって、example.com/foo//bar////baz
のようなURLはexample.com/foo/bar/baz
になります。
REQUEST_URI
サーバ変数には、URLパスのみが含まれます(スラッシュで始まります)。例えば。 (上記の例)。 %1
および%2
は、最後にマッチしたCondPattern(つまり、ダブルスラッシュの両側の文字列)のキャプチャされたグループの後方参照です。
RewriteRule
の単一ドット(.
)のパターンは、1文字に一致します。したがって、このルールは、URLパスが空の場合はドキュメントルートを除くすべてのURLに一致します。
複数のスラッシュをチェックする理由は?これらが物理ファイルの要求である場合、Apacheはリソースを提供するために暗黙的に複数のスラッシュを減らします。したがって/foo//bar////baz.html
は/foo/bar/baz.html
と同じものを返します。だから、それは「良い」です。しかし、これらは技術的に異なるURLなので、重複コンテンツと検索エンジンによって認識される可能性があります。他の目的のためにURLを解析している場合、アプリケーションを中断する可能性もあります。これは問題である場合とそうでない場合があります。それは複数必要で、これは間違ってなど(何かがこれらのURLが生成されているが生じたウェブアプリで破った場合を除きます。)
が、私はこの方法が特に効率的ではないことを追加することになりますへのリンクをユーザーが必要となります追加のスラッシュがたくさんある場合は、外部リダイレクトを使用します(これは、とにかくエッジケースをキャッシュすることのみを目的としています)。例えば、要求が与えられると、次のリダイレクトが発生します。
- (初期リクエスト/リダイレクト)
/foo//bar/baz
(リダイレクト)
/foo//bar//baz
(リダイレクト)
/foo//bar///baz
(リダイレクト)
/foo/bar/baz
%{REQUEST_URI}はドメインと一致せず、foo.bar.comに一致するのは%{HTTP_HOST}です。必要な情報を教えてください。 –
ああ、大丈夫です。それから私は間違っていた。しかし、関係なく、私はそれが何を理解しようとしています。なぜ二重のスラッシュがあるのでしょうか? –
このコードは本当に私にユーザーエクスペリエンスレベルを高めるために適用される新しいテクニックを与えるので、ユーザーが誤ってスラッシュを追加すると、彼は正しく行くべきです、多くの感謝 –