2011-08-02 10 views
0

私は自分のサイトのSEOフレンドリーなURLを更新し、新しいサイトマップをGoogleに提出しました。問題は、以前のURLと新しいURL(サイトマップのURL)の下に私の古いコンテンツがまだ表示されているため、ランキングで罰せられているようです。私は、次の作業をする正規表現で変数をキャプチャする方法を把握しようとしていますが、それを正しく得るように見えることはできません。mod_rewriteの条件文に関するヘルプ

アイデア?我々はパンダ/農家の更新の影響を受けた車の機密情報を持っています。

Old URL: http://www.mysite.com/forsale/light-trucks/12345/2010-dodge-ram-1500.html 

New URL: http://www.mysite.com/cars-trucks-for-sale/light-trucks/2010/dodge/ram-1500/12345/2010-dodge-ram-1500.html 

は今のところ、それらのURLのいずれか一方が(:showcontent.php?id=12345彼らはスクリプトに書き換え)動作します。

Googleはまだ私の古いURLを知っていて、私のサイトはすべてが唯一の新しいURLを表示するマップするので、これは、重複したコンテンツを意味します...

私はAA 301リダイレクトを示し、私の古いコンテンツはに書き換えされることを確認する必要がありますその場で新しい形式に私は古いURLに含まれていないいくつかの新しいURLパラメータを持っていることに気づく...

RewriteRule ^/?(forsale)/([-a-zA-Z0-9_-]+)/([0-9]+)/([-a-zA-Z0-9_-]+)\.html$ showcontent.php?id=$3 [L] 

RewriteRule ^/?(cars-trucks-for-sale)/([-a-zA-Z0-9_-]+)/([0-9]+)/([-a-zA-Z0-9_-]+)/([-a-zA-Z0-9_-]+)/([0-9]+)/([-a-zA-Z0-9_-]+)\.html$ showcontent.php?id=$6 [L] 

上記のルールは、現在動作しますが、私は最初のものと書き換えにインバウンド要求をキャプチャする必要がありますそれらを第2に。私は元のURLを尊重することを止めることができましたが、私はそれらのランクを持っていました。私は401エラーを表示したくありません。

答えて

0

content-typenew-content-typeが定数値で、これは古いURLと新しいURLの間の唯一の違いです。

もしそうなら - これを行うのは非常にいくつかの方法があります: - ウェブサイトのルートフォルダに.htaccessファイルに以下の行を置く配置した場合

1.のmod_rewriteを使用するには(あなたはそれを求めました。他の場所でいくつかの調整必要になります):

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

RewriteRule ^content-type/([^/]+)/(\d+)/([^/]+\.html)$ http://www.mysite.com/new-content-type/$1/$2/$3 [R=301,L] 

まあ - URLは)あなたが提供した例や説明に基づいて(非常に類似しているため - あなたも、この簡単な方法(注行くことができます:これをリダイレクトされますすべてのURLは/content-type/です。あなたの目的は、その構造に一致するのみ.htmlを終了し、URLをリダイレクトすることであれば、それを使用しないでください):

RewriteRule ^content-type/(.+)$ http://www.mysite.com/new-content-type/$1 [R=301,L] 

2.のmod_rewriteを使用していない - 古いものと新しいURLのURL構造は非常に似ています。 。そうであっても、これは仕事を行います(上記の注を参照してください):

Redirect 301 /content-type/ http://www.mysite.com/new-content-type/ 

これは(301恒久的なリダイレクト)とまったく同じに/content-type/で始まるが、代わりに/new-content-type/とURLへのすべての要求をリダイレクトします。


UPDATE:あなたの本当のURLが古いものとは全く異なるため、OP

によって提供されるより現実のURLが、全く本当にこのため、単一の行書き換えルールを記述するための良い方法はありません。したがって、私は2つの主要なオプションを参照してください。

1.を(可能な場合は、好ましくは、サーバの設定で、.htaccessファイルの上のどこかにそれを置く)は、各旧URLのリダイレクトルールを作成します

Redirect 301 /forsale/light-trucks/12345/2010-dodge-ram-1500.html http://www.mysite.com/cars-trucks-for-sale/light-trucks/2010/dodge/ram-1500/12345/2010-dodge-ram-1500.html 

場合そのような古いURLがたくさんあります。このアプローチは本当に良いことではありません - 1つのリクエストごとにテストするURLが多すぎるし、メンテナンスのコストがかかる(リダイレクトルールを作成する)

2.現在のリダイレクトルールをそのまま使用します(showcontent.php?id=12345に書き換えます)。このshowcontent.phpファイルでは、適切なURL(ウェブサイト上にある必要があります)を生成し、要求されたURLと比較します($_SERVER['REQUEST_URI']から取得してください)。 URLが異なる場合は、問題301を適切なURLにリダイレクトします(header()機能を使用)。 - これは、このウェブサイトの仕組みです(例:)。 .htaccess(PHPが起動しなければならない)よりも少し遅いかもしれませんが、実装と保守(メンテナンスコストは実質的にゼロ)が簡単です。

+0

これは意味がありますが、私の例をあまりにも一般的なものにしようとしました。私はより具体的になります。上記の私の編集した質問を見て、助けてくれてありがとう! – user409858

+0

@ user409858私の更新された回答を参照してください – LazyOne

+0

ありがとう...愚かな私はPHPでこれを行うことを忘れていた...とてもシンプルな...私はこれよりも困難にしようとしていた! – user409858