0

地域と言語を示すために、最初にこの形式のURLで2つの偽のサブディレクトリを使用しています。

/gb/en/tours/lesson-observation

この正規表現は、最初の2つの偽のサブディレクトリがそれぞれ2〜3文字と2〜5文字の長さの場合に一致します。(補足:なぜ{1,2}ここで代わりに使用する必要があるのか​​わかりません{2,3}。)

/^\/.{1,2}[^\/]\/.{1,4}[^\/]\/(.*)/

要求されたURLがパターンと一致しない^/2-3chars/2-5chars/場合、最初に要求されたURL全体を取得して、にリダイレクトできるようにするにはどうすればよいですか/gb/en$1。(これが望ましいのは、サイトの英国の地域と英語のバージョンがデフォルトであり、要求されたURLに地域と言語のコードが見つからない場合に使用する必要があるためです。)

例:

/page-name
is not matched by the /2-3/2-5 pattern and so should be redirected to:
/gb/en/page-name

/ca/fr/page-name
is matched by the /2-3/2-5 pattern and so should not be redirected
4

1 に答える 1

0

これを一致させるには:

/gb/en/tours/lesson-observation

以下を使用できます。

/[^/]{2,3}/[^/]{2,5}/.*

ここで、最初の 2 つのセグメントがこれらの範囲内にない場合を検出する必要があるため、最初のセグメントが 2 ~ 3 文字よりも大きいか小さいかを示します。

/[^/]?/                   <-- 0 or 1 characters
/[^/]{4,}/                <-- 4 or more characters
/(?:[^/]?|[^/]{4,})/     <-- Combine the above two with an OR (|)

同様に、2 番目のセグメントについては次のようになります。

/(?:[^/]?|[^/]{5,})/     <-- 0 or 1 characters, or 5 or more characters

両方を組み合わせると、最初の正規表現と一致しないものはすべて正規表現になります。

/(?:[^/]?|[^/]{4,})/(?:[^/]?|[^/]{5,})/.*

これらすべての正規表現で区切り記号を省略しましたが/、区切り記号として使用する必要はないことに注意してください。#または~または任意の文字を使用できます。/利点:区切り文字として使用しない場合、これにより/、最終的な正規表現内でエスケープされないままにすることができます。

#/(?:[^/]?|[^/]{4,})/(?:[^/]?|[^/]{5,})/.*#   <-- # is the delimiter

編集: 2 番目の URL セグメントはオプションであるため、2 番目のセグメントには次のようなものが必要です。

(?:/(?:[^/]?|[^/]{5,})/)?

それを完全な正規表現に戻すと、次のようになります (アンカーと区切り記号を使用:

#^/(?:[^/]?|[^/]{4,})(?:/(?:[^/]?|[^/]{5,})/)?.*$#
于 2013-02-21T03:59:24.117 に答える