codeigniter,如何避免由于路由配置不正确而导致内容重复?

发布于 2024-11-08 01:44:16 字数 916 浏览 0 评论 0原文

我正在将一个复杂的旧网站迁移到一个使用 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)'] = 'controller/$1/$2/$3';
  • $url_suffix is '.html'

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

  • /en/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/
  • /en/products/hard-disks-2.html/.html

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

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

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

I'm migrating a complex old website to a new one coded with codeigniter and i'm facing a lots of rewriting url problems leading to duplicated content because of the way that the codeigniter's routes config works.

I've old urls like this:

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

The new site instead have seo friendly urls like:

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

In my routes config i've:

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

This is leading to duplicated content because:

  • /en/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/
  • /en/products/hard-disks-2.html/.html

all of the above are valid routes for codeigniter and this lead for duplicated content within the website.

Is there a way to avoid this? Maybe using regular expression?

I cannot solve this problem with .htaccess because the website has too many possibile combinaton of the urls and i've also some controller where i still need to use "get" parameters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怀中猫帐中妖 2024-11-15 01:44:16

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

首先在 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 并在 paths.php 中使用正则表达式。

唯一的问题是尾部斜杠重复问题,但这可以通过另一个解决方案中的 .htaccess 全局避免:
使用 .htaccess 删除尾部斜杠(主页/登陆页面除外)

I finally figure out how do not have duplicate urls parsing.

First of all in config.php remove the suffix, better never user it:
$config['url_suffix'] = '';

Then in routes.php never use wildcards and always uses regular expression.

I.e, if i use:
$route['(:any)/(:num)'] = 'homepage/parser/$1/$2';
this will work for all the following urls:

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

and so on!

Instead:

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

this only work for

/a/10

and:

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

will only work if you URLs really end in .html

Unlucky /a/10.html/ is still a duplicate, so, i need at least one .htaccess rule to remove trailing slashes from URLs

I really need unique URLs so i think i'm dropping any future codeigniter development for this project where i've mixed url: 1) .html 2) directories 3) old dynamic urls

Instead i figure out that for SEO purpouse probably is the best to:
- only use pages without extensions
- avoid any directories

So if this is the case (another project of mine), i just use plain URLs in my code and regular expressions in routes.php.

The only issues is the trailing slash duplicate problem but this can be avoided globally with this .htaccess from this other solution:
Remove trailing slash using .htaccess except for home / landing page

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文