2011-05-19 34 views
1

我正在将一个复杂的旧网站迁移到一个使用codeigniter编码的新网站,并且由于codeigniter路由配置的工作方式,导致重复内容的许多重写url问题。codeigniter,如何避免重复的内容,因为路由配置不正确?

我有旧网址是这样的:

  • /detail.php?id=ABCDE & LANG = EN &页= 2
  • /细节/ ABCDE/EN/2

新网站改为拥有seo友好的网址,例如:

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

以我的路由配置我:

  • $路线[ '(:任何)/(:任何)/(:任何)'] = '控制器/ $ 1/$ 2/$ 3' ;
  • $ url_suffix才能是 '的.html'

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

  • /EN /产品/硬盘-2
  • /EN /产品/硬盘-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

上述所有的有效期为笨路线和这导致网站内的重复内容。

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

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

+0

如果你从来没有链接重复的网址,谷歌将永远不会找到它... – Aren 2011-05-19 22:02:23

+0

@Aren倒霉了一些其他人的错误或者代码本身会发生,那就发生了;也有很多这是因为旧的网站是完全旧式/index.php?a=3&b=4所以.htaccess无法承受所有的参数与301迁移旧网址 – Antonio 2011-05-20 12:15:24

回答

0

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

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

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

I.e,如果我使用: $ route ['(:any)/(:num)'] ='homepage/parser/$ 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规则来删除网址后面的斜杠

我真的需要独特的网址,所以我认为我放弃了这个项目的任何未来codeigniter发展,我混合了网址:1)的.html 2)目录3)旧的动态网址

相反,我弄清楚,对于SEO purpouse可能是最好的: - 只使用没有扩展名的网页 - 避免任何目录

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

唯一的问题是结尾的斜线重复的问题,但是这可以在全球范围与该其他解决这个的.htaccess来避免: Remove trailing slash using .htaccess except for home/landing page