いくつかのカスタムリダイレクトで.htaccessファイルをチェックしました。完全には理解していない2つのリダイレクトがあります。
_RedirectMatch 301 ^/news/([0-9]+)-(.*) /blog
RedirectMatch 301 ^/news/([a-z]+)-(.*)/$ /blog/$1
_
どちらのリダイレクトもnews
ディレクトリ内のサブフォルダーまたはページをリダイレクトしていますが、[0-9]+)-(.*)
および_([a-z]+)-(.*)
_の部分が理解できないため、方法を完全に把握できません。彼らは正確にはどういう意味ですか?
混乱しているパターンは 正規表現 関数にすぎません。 ([0-9]+)-(.*)
および([a-z]+)-(.*)
パターンには、それぞれ2つのグループがあります。正規表現のグループは、()
内で何かとして分類されます。次に、グループのコンテンツは、指定された基準に従って照合されます。
([0-9]+)
の基準は、1つまたは複数の数値に一致することです。これにはアルファベットや特殊文字は含まれません([a-z]+)
の基準は、1つまたは複数の小文字に一致することです。これには、スペース、数字、大文字などは含まれません。(.*)
では、アルファベット、数字、特殊文字などに関係なく、すべての文字に一致することが基準です。.htaccess
で次のことが起こっています:
RedirectMatch 301 ^/news/([0-9]+)-(.*) /blog
RedirectMatch 301 ^/news/([a-z]+)-(.*)/$ /blog/$1
ステートメント1では、パターン^/news/([0-9]+)-(.*)
は、URLがexample.com/news/23-article
の場合に一致し、単にexample.com/blog
にリダイレクトされます。
ステートメント2では、パターン^/news/([a-z]+)-(.*)/$
は、URLがexample.com/news/latest-article/
である場合に一致し、example.com/blog/latest
にリダイレクトされます。
ステートメント2の宛先URLの$1
に注意してください。$ 1は、一致したグループ1のコンテンツをフェッチするために使用されます。したがって、最初のグループのコンテンツはWord latest
であるため、宛先URLは/blog/latest
として取得されます。
これらは正規表現(略して「正規表現」)です。具体的には、ApacheはPCRE(Perl互換正規表現)構文(PHPと同じ、JavaScriptと同様など)を使用します。
RedirectMatch 301 ^/news/([0-9]+)-(.*) /blog RedirectMatch 301 ^/news/([a-z]+)-(.*)/$ /blog/$1
RedirectMatch
ディレクティブは、正規表現(2番目の引数)を要求されたURLパスと一致させようとします。一致する場合、リダイレクト応答が返され、ブラウザーをターゲットURLにリダイレクトします(3番目の引数)。
2番目の例のターゲットURLの$1
backreferenceは、ソースURLパスで一致したテキストをコピーします。例えば。 /news/abc-123/
へのリクエストが与えられると、abc
部分は/blog/abc
にリダイレクトするために「コピー」されます(後述)。
([0-9]+)-(.*)
これは基本的に、1つ以上の数字の後にハイフンが続く(その後に何でも続く)と一致します。具体的には:
[0-9]
-この「文字クラス」([
..]
で示される)は、0〜9の範囲の単一の文字に一致します。数字。+
は「数量詞」であり、1つ以上の先行する文字/グループと一致します。したがって、1桁以上に一致します。-
このハイフンは文字通り一致します(文字クラスの外で使用する場合、特別な意味はありません)。.*
は、任意の数の文字に一致します(改行を除く)。具体的には、.
は任意の文字(改行を除く)に一致し、*
は0以上の先行する文字/グループに一致する数量詞です。 (1つ以上に一致する+
と比較してください。)(
..)
は、「後方参照を使用して後で使用できる」「キャプチャグループ」を作成します。ただし、これらはここでは使用されていません。上記は簡略化できます(後方参照が使用されないため)。 1桁以上の数字に続けてハイフンを付けるだけです。
\d+-
\d
は、数字に一致する省略文字クラスです。すなわち。 [0-9]
と同じです。
([a-z]+)-(.*)/$
上記と非常に似ていますが、1文字以上の小文字(a-z)、ハイフン、それに続く任意のスラッシュで終わる前に一致します。
$
はアンカーであり、文字列の終わりを示します。ここで使用する場合のURLパスの終わり。逆に、^
は文字列の先頭に一致します。 URLパスの開始点(中間点とは対照的)。最初の正規表現とは異なり、この例では最初の後方参照($1
)が使用され、([a-z]+)
に一致するものをすべてキャプチャします。したがって、たとえば、/news/abc-123/
は/blog/abc
にリダイレクトされます。
後方参照のキャプチャと末尾のスラッシュのため、これは最初の正規表現ほど単純化できません。ただし、括弧の2番目のグループは削除できます。
([a-z]+)-.*/$