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

codeigniter,如何避免由于路由配置不正确而导致内容重复?,codeigniter,seo,web-crawler,Codeigniter,Seo,Web Crawler,我正在将一个复杂的旧网站迁移到一个用codeigniter编码的新网站,由于codeigniter的routes配置的工作方式,我面临许多重写url的问题,导致内容重复 我有这样的旧URL: /detail.php?id=ABCDE&lang=en&page=2 /详图/ABCDE/en/2 新站点改为具有seo友好URL,如: /en/products/hard-disks-2.html 在我的路线配置中,我: $route[':any/:any/:any']='controller/$1/$

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

我有这样的旧URL:

/detail.php?id=ABCDE&lang=en&page=2 /详图/ABCDE/en/2 新站点改为具有seo友好URL,如:

/en/products/hard-disks-2.html 在我的路线配置中,我:

$route[':any/:any/:any']='controller/$1/$2/$3'; $url_后缀为“.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解决这个问题,因为该网站有太多可能的URL组合,而且我还有一些控制器,在那里我仍然需要使用get参数。

我终于找到了不进行重复URL解析的方法

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

然后在routes.php中,从不使用通配符,而是始终使用正则表达式

即,如果我使用: $route[':any/:num']='homepage/parser/$1/$2'; 这将适用于以下所有URL:

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

相反:

$route['([\w_-]+)/(\d+)'] = 'homepage/parser/$1/$2';
这只对你有用

/a/10
以及:

只有在URL真正以.html结尾时才有效

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

我真的需要唯一的url,所以我想我会放弃这个项目中任何未来的codeigniter开发,我混合了url:1.HTML2目录3旧的动态url

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

如果这是我的另一个项目,我只在代码中使用普通URL,在routes.php中使用正则表达式

唯一的问题是尾部斜杠重复问题,但这可以通过此解决方案全局避免。htaccess从另一个解决方案:

如果你从不链接重复的URL,谷歌将永远找不到它…@不幸的是,会发生一些其他人或代码本身的错误,而这一切都发生了;另外,生成这些内容的原因很多,因为旧网站完全是旧式的/index.php?a=3&b=4,所以.htaccess无法提供所有参数,以便使用301迁移旧URL
$route['([\w_-]+).html'] = 'homepage/parser/$1';