当前位置

Drupal的Views中添加Page参数来使不存在的页面显示404 Not Found

James Qi 在 2013年2月22日 - 10:15 提交
内容摘要:Drupal中的Views是一个非常有用的工具,不需要编程就可以生成各种列表,我们一直在各个网站中使用。但也存在一个问题,举例如下: http://ita.bizdirlib.com/......

  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改了。

自由标签: