【问题标题】:codeigniter, how to avoid duplicated content because of the routes incorrect configuration?codeigniter,如何避免由于路由配置不正确而导致内容重复?
【发布时间】:2011-05-19 19:32:13
【问题描述】:

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

我有这样的旧网址:

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

新网站反而有 seo 友好的网址,例如:

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

在我的路线配置中:

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

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

  • /zh/products/hard-disks-2
  • /en/products/hard-disks-2.html
  • /en/products/hard-disks-2.html?p=2
  • /en/products/hard-disks-2?p=2
  • /en/products/hard-disks-2.html/
  • /zh/products/hard-disks-2.html/.html

以上所有都是 codeigniter 的有效路线,这导致网站内的重复内容。

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

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

【问题讨论】:

  • 如果你从不链接重复的网址,谷歌将永远找不到它......
  • @Aren 很不幸,其他人或代码本身的一些错误会发生,这已经发生了;也有很多是因为旧网站是完全旧式的 /index.php?a=3&b=4 所以 .htaccess 不能承受所有参数来迁移 301 旧网址

标签: codeigniter seo web-crawler


【解决方案1】:

我终于弄清楚如何没有重复的url解析。

首先在 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';

仅当您的 URL 真正以 .html 结尾时才有效

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

我真的需要唯一的 URL,所以我认为我将放弃这个项目的任何未来 codeigniter 开发,其中我混合了 url:1) .html 2) 目录 3) 旧的动态 url

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 2020-03-09
    • 1970-01-01
    • 2019-10-11
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多