1

Google は、ウェブサイトのサイドバーにあるページャーを発見しました。このページャーを使用すると、ユーザーはブログ エントリ上で「タグ」をスクロールできます。ページャーをクリックすると、新しい URL に移動しますexample.com/blog/article-title?page=1

ブログには約 500 件の投稿があり、ページャーには約 140 ページのタグがあるため、Google は私のサイトの非常に多くのページをインデックスに登録しました。私はいくつかの理由でこれを望んでいません。このタグ ブロックのページャーは完全に不要なので既に削除しましたが?page=X、時間が経つにつれて Google がそれらをインデックスから削除することを期待して、これらすべての URL で 301 リダイレクトを実行したいと考えています。

URL は次のようになります。

ユーザーを に送信する htaccess 経由で 301 リダイレクトを行うにはどうすればよい http://example.com/blog/blog-article-title ですか?

私は多くのバリエーションを試しました

  • RewriteRule ^blog/(.*).?page(.*)$ /$1/blog/$2? [R=301,L]

  • RedirectMatch 301 ^/blog/(.*)\?page(.*)$ /blog/$1

しかし、これまでのところ運がありません。どんな助けでも大歓迎です。

編集:これに出くわす可能性のある他の人のために、Google はヘッダーで定義されている正規の URL を完全に無視し、30,000 以上の URL の組み合わせすべてをインデックスに登録していました。以下の受け入れられた回答でhtaccessの書き換えを行うと、これらのページで301が適切に実行されます。もちろん、これにはポケットベルを別の場所に移動する必要がありますが、それは私の特定の状況では既に処理されています。

4

3 に答える 3

2

問題は、クエリ文字列ではなくURLにリダイレクトしようとしていることです。この質問を参照してください:htaccessを使用したクエリ文字列リダイレクト

RewriteCond基本的に、クエリ文字列に基づくが必要です。2行になります。すなわち:

RewriteCond %{QUERY_STRING} ......
RewriteRule ....
于 2012-11-13T01:44:18.067 に答える
2
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/blog/
RewriteCond %{QUERY_STRING} page
RewriteRule (.*) /$1? [R=301,L]

これは、あなたがやろうとしていることを達成するはずです。

于 2012-11-13T15:30:08.980 に答える
2

query_string オプションがなければ、これはうまくいくはずです:

RewriteEngine On
# one url with many params
#RewriteRule ^blog/blog-article?(.*) http://www.yourblog.com/index\.php$1 [R=301,L]
# or many url
RewriteRule ^blog/sub(.*)\?(.*) http://www.yourblog.com/onething/$1?$2 [R=301,L]

これが機能しない場合は、スクリプトに別の問題がある可能性があります。

于 2012-11-13T02:53:42.060 に答える