您在這裡

Drupal的Views中添加Page參數來使不存在的頁面顯示404 Not Found

James Qi 在 2013年2月22日 - 10:15 發表

  Drupal中的Views是一個非常有用的工具,不需要編程就可以生成各種列表,我們一直在各個網站中使用。但也存在一個問題,舉例如下:

  最後一種情況不是我們希望的,特别是當以前存在的某個頁面根據需要删除後,不是顯示404 page not found,而是顯示整體列表的話,浏覽者的體驗并不好,并且搜索引擎也不會認為該頁面已經删除,我們以前還需要在robots.txt中專門添加這個頁面的網址來屏蔽爬取,然後再提交搜索引擎删除緩存快照和頁面收錄。

  發現這個問題存在有1、2年了,中間嘗試過幾次都沒有解決,這幾天又找了些資料,再自己反複測試,終于是找到正确的解決辦法了:

  1. 進入相關視圖Views中的頁面Page設置,在參數Arguments中添加一個Global: Null;
  2. 勾選Fail basic validation if any argument is given,也就是如果有任何參數就驗證失敗,然後顯示404;
  3. 更新參數設置,保存Views。

  截圖如下:

  以上是Drupal 6中的設置,Drupal 7中類似,隻是argument 改為 contextual filter,然後是添加一個Global: Null,并勾選More中的Fail basic validation if any argument is given即可。


2013年3月3日補充:

  進行了上面的修改後,發現Views的Page中有大量錯誤網址,例如:

  以前都忽略了,因為這些錯誤的網址以前都可以正常訪問的,現在成了404。這種錯誤網址确實應該從搜索引擎中删除,但現在集中出現有些不好,google webmaster tools就來信提醒這種情況。

  本來應該是下面這樣的網址才對:

  這種錯誤網址出的原因也還不清楚。暫時就任由搜索引擎去删除老的、收錄新的,沒有做更多處理。隻是在依然存在問題的網站做了清除drupal緩存、boost緩存和squid緩存的工作。


2013年4月1日補充:

  Google Webmaster Tools中的報錯依然延續不斷,想到一個辦法,既然錯誤的網址是有規律可循的,就可以采用Apache ReWrite的辦法來進行重定向,把錯誤的網址糾正為正确的網址,這顯然更合适一些,于是進行了一些測試,在.htaccess中添加下面的代碼:

# views error url correct

RewriteCond %{REQUEST_URI} ^\/inquiry_6\/.+$
RewriteCond %{QUERY_STRING} ^page=\d+$
RewriteRule ^(.*)\/.+$ $1 [L,R=301]

RewriteCond %{REQUEST_URI} ^\/m\/inquiry_6\/.+$
RewriteCond %{QUERY_STRING} ^page=\d+$
RewriteRule ^(.*)\/.+$ /m/$1 [L,R=301]

  這樣就通過301重定向将business_directory與?page=123之間多餘的/company_name去掉,例如http://inquiry.mingluji.com/inquiry_6/%E7%94%AF?page=88 自動改為 http://inquiry.mingluji.com/inquiry_6/?page=88

  2013年4月份把各國.bizdirlib.com的drupal 6網站views改了,各省.youbianku.com的drupal 6網站views改了,6月把各國.youbianku.com的drupal 6網站views改了。


  2018年補充:另外一篇博客《讓Drupal的Views中變量找不到内容的頁面顯示404錯誤》。

自由标簽:

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。