qeephp url美化之後的 SEO問題

來源:互聯網
上載者:User

一個網站運營一段時間後,欄目設定很可能發生變化,此時就有可能導致 URL 變化。而 URL 變化的最大問題就是導致以前的串連失效,對使用者體驗非常不好,而且也會影響搜尋引擎對網站的收錄。所以我們必須保證以前的 URL 不失效。

例如以前新聞頁面的網址是 http://msplinks.com.cn/MDFodHRwOi8vbXkuY29tLzEyMzQ1Ni5odG1s,而現在是 http://msplinks.com.cn/MDFodHRwOi8vbXkuY29tL25ld3Mvc3BvcnRzLzEyMzQ1Ni5odG1s。對於這種需求,我們利用 URL 路由可以輕鬆搞定。

先寫兩個規則:

  1. # 解析和產生新的新聞頁面 URL
  2. news_page:
  3.   regex: '/news/([a-z]+)/([0-9]+)\.html'
  4.   config:
  5.     category: 1
  6.     news_id:  2
  7.   defaults:
  8.     controller: news
  9.     action:     show
  10. # 解析老的新聞頁面 URL
  11. news_page_keep_old:
  12.   regex: '/([0-9]+)\.html'
  13.   config:
  14.     news_id:  1
  15.   defaults:
  16.     controller: news
  17.     action:     show

複製代碼

上述兩條規則,放在前面的優先順序更高。

當請求的 URL 是 http://msplinks.com.cn/MDFodHRwOi8vbXkuY29tLzEyMzQ1Ni5odG1s 時,前面的規則匹配失敗,而後面的規則匹配成功。因此請求送給了 news 控制器的 show 動作方法處理,並且附帶 news_id 參數。

  1. function actionShow()
  2. {
  3.     $news_id = intval($_GET['news_id']);
  4.     $news = News::find($news_id)->get();
  5.    
  6.     ... 顯示新聞內容
  7. }

複製代碼

這樣就保證了原有 URL 的有效性。

那麼當請求是 http://msplinks.com.cn/MDFodHRwOi8vbXkuY29tL25ld3Mvc3BvcnRzLzEyMzQ1Ni5odG1s 時,前面的規則就匹配成功,此時就不會再匹配後面的規則。而請求還是 actionShow() 來處理。前面的規則多了一個 category 參數,這裡並沒有用上,直接忽略即可。但這個參數是必不可少的,會用於後面的 URL 產生。

現在我們來看看模板中產生 URL 的代碼:

  1. url('news/show', array(
  2.     'news_id' => $news->id,
  3.     'category' => $news->category_name
  4. ))

複製代碼

可以看到,這裡我們產生 URL 時使用了 category 參數,因此前面的規則會被用於產生 URL。最終我們會得到類似 http://msplinks.com.cn/MDFodHRwOi8vbXkuY29tL25ld3MvY2Fycy8yMzM0My5odG1s 這樣的結果。

現在我們已經完美的解決了問題:既保證了以前 URL 的有效性,又讓訪問者在訪問老頁面後可以通過頁面中的 URL 導航到新格式的 URL 中。

--------------------------------------

URL 隨心變

除了 SEO,URL 路由還可以讓我們隨心所欲的構造 URL 地址。例如 http://msplinks.com.cn/MDFodHRwOi8vcWVlcGhwLmNvbS9jYXNlcy8xOQ== 這個 URL 規則是:

  1. cases_show:
  2.   pattern: "/cases/:id"
  3.   defaults:
  4.     controller: "cases"
  5.     action: "show"
  6.   config:
  7.     id: "[0-9]+"

複製代碼

我們把規則改為:

  1. cases_show:
  2.   regex: '/mygod/show\-me\-the\-money/news\-sports\-(\d+)\.html'
  3.   defaults:
  4.     controller: "cases"
  5.     action: "show"
  6.   config:
  7.     id: 1

複製代碼

這時 URL 就變成 http://msplinks.com.cn/MDFodHRwOi8vcWVlcGhwLmNvbS9teWdvZC9zaG93LW1lLXRoZS1tb25leS9uZXdzLXNwb3J0LTE5Lmh0bWw= 了。可以說和以前的 URL 簡直是兩碼事。

而這些修改和變化,完全不需要我們修改應用程式中的代碼和模板代碼,唯一需要改動的就是路有規則表。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.