2

ウェブサイトが私のサイトに間違ってリンクしており、リンクの最後にピリオドが追加されています:

http://www.example.com/hello-world.

これは 404 ページに移動すると予想していましたが、代わりに、有効な URL にリダイレクトせずに正しいページをロードします。

これにより、検索エンジンで重複コンテンツの問題が発生します。

他のいくつかのWordpressサイトを見ると、これはよくある問題のようです。ピリオドまたはハイフンをいくつでも入力すると(私が見つけた2つだけ)、ページは正しいコンテンツをロードします:

http://www.example.com/hello-------world.......
http://www.example.com/hello-....world-----

他の誰かがこの問題に遭遇し、解決策を見つけましたか?

リンクされた URL から正しい URL へのリダイレクトをセットアップすることはできますが、理想的には、これが将来発生しないように解決策を見つけたいと考えています。

アップデート

この問題は、 /wp-includes/formatting.php (行 954)sanitize_title_with_dashesの関数が原因であると思われることがわかりました。

function sanitize_title_with_dashes($title, $raw_title = '', $context = 'display') {

    echo "1: " . $title . "<br />";

    $title = strip_tags($title);
    // Preserve escaped octets.
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    // Remove percent signs that are not part of an octet.
    $title = str_replace('%', '', $title);
    // Restore octets.
    $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);

    if (seems_utf8($title)) {
        if (function_exists('mb_strtolower')) {
            $title = mb_strtolower($title, 'UTF-8');
        }
        $title = utf8_uri_encode($title, 200);
    }

    $title = strtolower($title);
    $title = preg_replace('/&.+?;/', '', $title); // kill entities
    $title = str_replace('.', '-', $title);

    echo "2: " . $title . "<br />";

    if ( 'save' == $context ) {
        // Convert nbsp, ndash and mdash to hyphens
        $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title );

        // Strip these characters entirely
        $title = str_replace( array(
            // iexcl and iquest
            '%c2%a1', '%c2%bf',
            // angle quotes
            '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba',
            // curly quotes
            '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d',
            '%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f',
            // copy, reg, deg, hellip and trade
            '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2',
        ), '', $title );

        // Convert times to x
        $title = str_replace( '%c3%97', 'x', $title );
    }

    $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');

    return $title;
}

ピリオドをハイフンに置き換え、次に複数のハイフンを置き換え、URL の末尾からハイフンをトリミングしているようです。

アップデート

これはカテゴリの問題ではないようです。カテゴリがそうでないのに、ページ/投稿のタイトルがそのレベルまでサニタイズされるのはなぜだろうか...

4

2 に答える 2

0

それは、URLの書き換えが書き換えられる方法のためです。

問題を解決するために、それをいじる必要があるかもしれません。これは.htaccess、Web サイトのドキュメント ルートにあるファイルにあります。

于 2012-11-13T16:47:14.537 に答える
0

検索エンジンは、あなたまたは他の誰かが意図的にリンクしていない限り、これらのリンクをインデックスに登録しません。基本的に、あまり気にすることはありません。

原因:

URL スラッグを取り込むとき、WordPress はおそらく変数をサニタイズし、不要な文字を取り除きます。実際の .htaccess ファイルと関係があるとは思えません。

于 2012-11-13T16:51:47.963 に答える