2013-04-09 82 views
-1

我不想在這裏用一堆.htaccess的問題膨脹一個帖子,所以我打破了他們個人。這與使用RedirectMatch爲現有網站的現有索引頁面創建規則有關。.htaccess SEO升級後重定向頁面鏈接?

具體來說,我的測試網站已經運行了大約一年,現在我正在使用.htaccess重新編寫乾淨的URL以獲得更好的SEO。所以,當我是根據查詢字符串中的鏈接稱爲其內容的容器頁面,就像這樣:

http://www.website.com/departments.php?dep=contact_us

我正在做的URL看起來像平滑:

http://www.website.com/contact-us/

我讀到的教程建議,將鏈接更改爲新的更時髦的搜索引擎優化友好風格將導致大量的404錯誤和損壞的頁面鏈接,直到網站被重新編入索引並記錄更新。

因此,我的問題:這是一個合法的問題,或將在24-48小時內收回新的鏈接?

我問,因爲我有幾個網站有很多層的文件結構,我想我需要在我的.htaccess文件中的TON規則來修復我可能創建的所有斷開的鏈接。

如果我在這裏製造混亂,請讓我知道,我會澄清事情。

非常感謝提前!

回答

2

因此,我的問題:這是一個合法的問題,或將在24-48小時內收到新的鏈接?

如果您使用301(永久性)外部重定向客戶端,則可以更快地實現。這比在服務器端進行內部重寫要複雜得多,因爲這會導致規則衝突。例如,如果您想在服務器的內部重寫url-a到url-b,則將瀏覽器從url-b重定向到url-a(意思是當客戶端明確要求url-b將其重定向到url-a時) :

# internally rewrite url-a (fake URL) to url-b (where the actual content is) 
RewriteRule ^url-a$ /url-b [L] 

# externally redirect url-b (actual content) to url-a (fake URL) 
RewriteRule ^url-b$ /url-a [L,R=301] 

由於重寫引擎環路,這條規則將繼續改寫彼此並導致500內部服務器錯誤(如果你替換爲RedirectMatch第二條規則同樣的事情發生)。要解決這個問題,您需要創建一個條件,以便僅在實際請求針對「url-b」時才應用外部重定向(第二個規則)。您可以通過匹配%{THE_REQUEST}變量來完成此操作,該變量實質上是HTTP請求的第一行。

使用您的網址範例,你有這樣的事情:

RewriteRule ^contact-us/?$ /departments.php?dep=contact_us [L] 

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /departments\.php\?dep=contact_us 
RewriteRule^/contact-us/ [L,R=301] 

這意味着當有人像谷歌,機器人試圖解決http://www.website.com/departments.php?dep=contact_us,第二個規則的條件將符合要求(這將看如:GET /departments.php?dep=contact_us HTTP/1.1),它將被重定向到http://www.website.com/contact-us/。此時,客戶端(google-bot)將請求/contact-us/,並且將應用第一條規則,並在內部將URI重寫爲/departments.php?dep=contact_us

+0

我的朋友,你是一個了不起的知識來源。我看到的唯一缺點是不得不爲每個頁面添加一條規則。這裏出現了兩個問題:索引的新鏈接需要多長時間?其次,這裏有一篇文章:http://coding.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/關於建議使用PHP功能的三分之一左右。這些會是一個更靈活的解決方法嗎?再次,可能高度感謝! – mileaminute 2013-04-09 01:41:38

+0

@mileaminute如果有像'/ contact-us /'映射到'/departments.php? dep = contact_us'這樣的東西的一般模式,你可以用正則表達式替換'contact-us'部分,比如'([^/] +)'和反向引用使用'$ 1'。使用PHP重定向絕對是一個更靈活的選擇。 php腳本(就像這個例子中的'departments.php')會知道它是直接請求的(而不是內部重定向),並在這種情況發生時重定向到適當的URL。 – 2013-04-09 01:50:09

+0

因此,如果這是您自己的項目,那麼您可能會使用.htaccess或PHP函數來執行此操作。 – mileaminute 2013-04-09 02:00:16