Cakephp,将旧的google搜索结果路由到新主页

Cakephp,将旧的google搜索结果路由到新主页,cakephp,redirect,seo,search-engine,routes,Cakephp,Redirect,Seo,Search Engine,Routes,我已经为一家公司创建了一个新网站,我希望所有以前的搜索引擎结果都被重定向。因为有相当多的页面,而且大多数页面都使用id,所以我希望使用一些通用的页面,而不是重新路由所有旧页面 我的第一个想法是: Router::connect('/*', array('controller' => 'pages', 'action' => 'display', 'home')); 并将其放在routes.php文件的最末尾[因为它是优先的],这样所有未使用以前的路由操作进行验证的请求都会返回tru

我已经为一家公司创建了一个新网站,我希望所有以前的搜索引擎结果都被重定向。因为有相当多的页面,而且大多数页面都使用id,所以我希望使用一些通用的页面,而不是重新路由所有旧页面

我的第一个想法是:

Router::connect('/*', array('controller' => 'pages', 'action' => 'display', 'home'));
并将其放在routes.php文件的最末尾[因为它是优先的],这样所有未使用以前的路由操作进行验证的请求都会返回true,并重定向到主页

然而,这不起作用

当我在路由器上使用不同的路径时,它会成功重定向。例如,如果我给出:

Router::connect('/*', array('controller' => 'projects', 'action' => 'browser'));
它很好用。当使用的控制器是页面、动作显示等时,会出现问题

我正在粘贴routes.php文件[因为它很小],希望有人能给我一个提示:

    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

    Router::connect('/company/*', array('controller' => 'articles', 'action' => 'view'));

    Router::connect('/contact/*', array('controller' => 'contacts', 'action' => 'view'));

    Router::connect('/lang/*', array('controller' => 'p28n', 'action' => 'change'));

    Router::connect('/eng/*', array('controller' => 'p28n', 'action' => 'shuntRequest', 'lang' => 'eng'));

    Router::connect('/gre/*', array('controller' => 'p28n', 'action' => 'shuntRequest', 'lang' => 'gre'));


    Router::parseExtensions('xml');

我建议您在必要时使用.htaccess文件来301重定向页面,而不是尝试处理cakePHP路由文件中的所有内容


您上面的内容不会转移排名,因为据我所知,您提出的任何基于routes.php的解决方案中都没有输出301重定向。

与其尝试处理cakePHP路由文件中的所有内容,我建议您在必要时使用.htaccess文件对页面进行301重定向


你上面所说的不会改变排名,因为据我所知,在你提出的任何基于routes.php的解决方案中都没有输出301重定向。

更大的问题是,路由没有重定向,它将URL与响应连接起来。换句话说,它确保现在无效的URL仍然生成有效页面。这与你想要实现的恰恰相反

你想告诉访问者一个曾经有效的URL已经不存在了。您可以通过发出适当的HTTP响应代码来实现这一点,在本例中,301永久移动。如果不这样做,URL对搜索引擎仍然有效,并且不会更新索引

您必须通过路由将所有无效URL连接到某个控制器操作,该操作将发出$this->redirect'…',301,或者您可以使用一些.htaccess规则进行重定向。使用哪一个取决于重定向的复杂性,但您可能能够使用simple.htaccess mod_重写规则


这方面的例子已经足够多了:

更大的问题是路由不会重定向,而是将URL与响应连接起来。换句话说,它确保现在无效的URL仍然生成有效页面。这与你想要实现的恰恰相反

你想告诉访问者一个曾经有效的URL已经不存在了。您可以通过发出适当的HTTP响应代码来实现这一点,在本例中,301永久移动。如果不这样做,URL对搜索引擎仍然有效,并且不会更新索引

您必须通过路由将所有无效URL连接到某个控制器操作,该操作将发出$this->redirect'…',301,或者您可以使用一些.htaccess规则进行重定向。使用哪一个取决于重定向的复杂性,但您可能能够使用simple.htaccess mod_重写规则


关于SO的例子已经足够多了:

当您连接到/*到Pages::display时会发生什么?我可能会尝试使用正则表达式在htaccess中解决这个问题,并发出301Travis Leleu,它会收到以下消息:找不到错误:在此服务器上找不到请求的地址“/asdasdf”。Davidell,你能举个例子或粘贴一个链接,它有更多关于这个问题的信息。感谢您在解决此问题时继续调试。您引用的错误消息可能意味着debug=0上下文中的任何内容。您可能会收到一个PHP警告/错误,它会说同样的话。当您连接/*到Pages::display时会发生什么情况?我可能会尝试使用正则表达式在htaccess中解决这个问题,并发出301Travis Leleu,它会收到以下消息:找不到错误:在此服务器上找不到请求的地址“/asdasdf”。Davidell,你能举个例子或粘贴一个链接,它有更多关于这个问题的信息。感谢您在解决此问题时继续调试。您引用的错误消息可能意味着debug=0上下文中的任何内容。您可能会收到一个PHP警告/错误,它会说同样的话。