codeigniter,如何避免重复内容,因为路由配置错误?

时间:2011-05-19 19:32:14

标签: codeigniter seo web-crawler

我正在将一个复杂的旧网站迁移到一个用codeigniter编码的新网站,由于codeigniter的路由配置的工作方式,我面临着导致重复内容的大量重写网址问题。

我有这样的旧网址:

  • /detail.php?id=ABCDE&lang=en&page=2
  • /细节/ ABCDE / EN / 2

新网站改为使用seo友好网址:

  • /en/products/hard-disks-2.html

在我的路线配置中:

  • $ route ['(:any)/(:any)/(:any)'] ='controller / $ 1 / $ 2 / $ 3';
  • $ url_suffix是'.html'

这导致重复的内容,因为:

  • / EN /产品/硬盘-2
  • /en/products/hard-disks-2.html
  • /en/products/hard-disks-2.html?p=2
  • / EN /产品/硬盘-2?p = 2时
  • /en/products/hard-disks-2.html /
  • /en/products/hard-disks-2.html/.html

上述所有内容都是codeigniter的有效路由,也是网站内重复内容的主要途径。

有没有办法避免这种情况? 也许使用正则表达式?

我无法用.htaccess解决这个问题,因为网站有太多可能的网址组合,而且我还有一些控制器,我仍然需要使用“获取”参数。

1 个答案:

答案 0 :(得分:0)

我终于弄明白了如何重复网址解析。

首先在config.php中删除后缀,最好永远不要用它: $ config ['url_suffix'] ='';

然后在routes.php中,永远不要使用通配符,并始终使用正则表达式。

是的,如果我使用: $ route ['(:any)/(:num)'] ='主页/解析器/ $ 1 / $ 2'; 这适用于以下所有网址:

/a/10
/a/10/11
/a/10/11/12

等等!

相反:

$route['([\w_-]+)/(\d+)'] = 'homepage/parser/$1/$2';

这只适用于

/a/10

$route['([\w_-]+).html'] = 'homepage/parser/$1';

仅在您的网址真正以.html

结尾时才有效

不幸的是/a/10.html/仍然是重复的,因此,我需要至少一个.htaccess规则来删除网址中的尾部斜杠

我真的需要唯一的URL,所以我想我正在放弃这个项目的任何未来的codeigniter开发,我混合了url:1).html 2)目录3)旧动态网址

相反,我发现对于SEO purpouse可能是最好的: - 仅使用没有扩展名的页面 - 避免任何目录

所以如果是这种情况(我的另一个项目),我只需在我的代码中使用普通URL,在routes.php中使用正则表达式。

唯一的问题是尾随斜杠重复问题,但这可以通过此其他解决方案中的.htaccess全局避免: Remove trailing slash using .htaccess except for home / landing page