0

文字列の一部を正規表現で見つかった値に置き換える必要があるが、正規表現を最終結果のベースとして使用する必要があるという状況が発生しました。

警告: これは、Web サイトのより大きな正規化の問題を解決するためのものです。

カスタム CMS があり、正規表現を介して URL に応答します。

例えば:

Request URI: /mysection/mykey/PageName.htm
Page Match:  /mysection/([^/]+)/pagename.htm

誰かが /mysection/mykey/PageName.htm を要求した場合、これは機能しますが、正しいページではありません。この場合、正しいページは /mysection/mykey/pagename.htm です。

最初に大文字と小文字を区別しない一致を行うと、ページにリンクされている人が正しいかどうかを確認できます。そうでない場合は、404 を表示しません。セクションで rel="canonical" を生成して、どのページが正しいページであり、これが実質的に重複していることを Google に伝えます。

ページの正しい URL は次のようになります。

/mysection/mykey/pagename.htm

そのため、リクエスト URI の「mykey」部分をページ マッチ文字列に重ね合わせますが、ページ マッチ文字列のバージョンを結果として合計として取得する必要があります。

私は preg_replace を見てきましたが、複数の置換が存在する可能性があるため、必要な 2 番目のパラメーターを指定することはできません。

ここに私が今いる場所に到達するために書いたいくつかのコードがあります:

// $page['uri'] is the regex to match
// $URL is the requested URL at the web server.

// NB: it is not important to worry about if we have found a valid or invalid URL
// at this stage as that has already been processed prior to this point.

if (preg_match("|". $page['uri'] ."|", $URL)) {
    // we get here if the URLs match correctly and case sensitively.
    echo "Matches" . PHP_EOL;
} else {
    // we get here if the URLs don't case sensitively match
    echo "Doesn't match" . PHP_EOL;
}

これは、([^/]+) を置き換えた $page['uri'] バージョンである必要がある rel= "canonical" URL を作成する必要がある場所であるため、問題が発生している [一致しない] セクションにあります。 $URI のそのセクションに含まれるものは何でも。

4

2 に答える 2

0

次の 3 段階の手順である必要があります。

  1. 正規表現から、一致を抽出します (こちらmykey)
  2. 正規表現の修正版を取得しますが、単純な文字列として扱います。/mysection/XXXXXXXXXX/pagename.htm
  3. XXXXXXXXXX (または任意の一意の識別子) を一致する mykey に置き換えます。

出力は/mysection/mykey/pagename.htm

于 2013-07-04T16:33:04.777 に答える
0

i機密性の高い正規表現では、大文字と小文字 の修飾子を使用します: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

于 2013-07-04T16:17:36.773 に答える