2011-08-02 104 views
0

我更新了我的網站的搜索引擎優化友好網址,並向Google提交了新的網站地圖。問題是,我似乎因爲我的舊內容仍然顯示在舊網址下方以及新網址(網站地圖中的一個)而在排名中受到懲罰。我一直在試圖弄清楚如何使用正則表達式來捕獲變量來完成以下工作,但似乎無法做到。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 

眼下,這些網址的任何一個就可以了(他們重寫的腳本:showcontent.php?id=12345)。

這意味着重複的內容,因爲谷歌仍然知道我的舊網址,我的站點地圖都表明只有新的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] 

以上規則,現在的工作,但我需要捕獲入站請求的第一個和重寫他們到第二個。我可以停止遵守原始URL,但我有一些排名,我不想只顯示401錯誤。

回答

0

據我所知content-typenew-content-type是不變的值,這是舊的和新的URL之間的唯一區別。

如果是的話 - 有這樣做的相當一些方法:

使用mod_rewrite的(你自找的 - 地方這些線路在.htaccess在網站根目錄文件夾如果放在其他地方的一些調整將需要):

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

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

哦 - 因爲網址非常相似(根據您所提供的例子和說明) - 你可以去連這個簡單的方法(注:這將重定向/content-type/文件夾中的任何網址。如果你的目標是重新僅匹配結構的.html結束的URL,那麼就不要使用它):

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

2.不使用mod_rewrite - 新舊網址的URL結構非常相似。 。因此,即使這將做的工作(見上注):

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

這會重定向(301永久重定向)與/content-type/完全一樣,但與/new-content-type/開始,而不是所有的請求的URL。


UPDATE:由OP

提供因爲你真實的URL是從舊的完全不同的更真實的URL,沒有真正爲此編寫一行重寫規則好方法。因此,我看到兩個主要選項:

爲每一箇舊的URL重定向規則(將它放在某處的.htaccess的頂部,最好在服務器配置,如果可能的話):

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 

如果你有很多這樣的舊URLs,那麼這種方法並不是很好 - 每個請求都需要測試的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