2012-11-13 29 views
1

Google在網站的側邊欄中發現了一個傳呼機,允許用戶在博客條目中滾動瀏覽「標籤」,每個傳呼機都會點擊鏈接到一個新的網址,例如, example.com/blog/article-title?page=1如何使用htaccess刪除URL參數但保留動態元素?

由於博客有500個帖子,而且尋呼機有140個頁面的標籤,Google爲我的網站編制了很多頁面的索引。我不想要這個,原因很多。我已經刪除了這個標籤塊上的尋呼機,因爲它是完全不必要的,但現在想要對所有這些?page=X網址執行301重定向,希望Google隨着時間的推移將它們從索引中刪除。

的網址是這樣的:

我怎樣才能做一個301通過htaccess的,將用戶發送到http://example.com/blog/blog-article-title重定向?

我迄今爲止嘗試過

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

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

,但沒有運氣許多變化。任何幫助將非常感激。

編輯:對於其他可能偶然發現的問題,Google完全忽略了標題中定義的規範網址,並對所有30,000個以上的網址組合進行了索引。在接受的答案中進行htaccess重寫,在這些頁面上正確執行301。當然,這要求我將尋呼機移到其他地方,但這已經在我的特定情況下處理了。

回答

2
RewriteEngine on 
RewriteCond %{REQUEST_URI} ^/blog/ 
RewriteCond %{QUERY_STRING} page 
RewriteRule (.*) /$1? [R=301,L] 

這應該實現你正在嘗試做的事情。

+0

這不會刪除每個URL上的??page =?查詢嗎?在某些頁面上,「?page =」可能是必需的,即博客列表。 –

+0

我更新了代碼以僅匹配/ blog /目錄中的任何內容。 – Sameh

+0

這很完美。嘗試了其他建議的幾個變化,只是不能讓他們按預期工作。 –

2

你的問題是你試圖重定向的URL而不是查詢字符串。看到這個問題:Query string redirection with htaccess

基本上,你需要一個基於查詢字符串的RewriteCond。這將是兩條線;即:

RewriteCond %{QUERY_STRING} ...... 
RewriteRule .... 
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] 

如果不工作,你可能有一些其他的問題,在您的腳本。

相關問題