【问题标题】:Special routing for page:1 in CakePHP paginationCakePHP 分页中 page:1 的特殊路由
【发布时间】:2013-04-22 14:04:35
【问题描述】:

我修改了 CakePHP 的 paginator helper 以打印出没有页面的首页链接,例如:

myexample.com/controller/action/id/page:1 它将是 myexample.com/controller/action/id/ 和其他任何页面 page:1 将是 像往常一样。

此时一切正常。但是,我注意到 myexample.com/controller/action/id/page:1 仍然可以按原样访问。我希望它应该在没有 page:1 的情况下访问。以下是我在config/routes.php中使用的路由规则

Router::connect('/action/:id/:page', array('controller' => 'controller', 'action' => 'action'), array('id' =>'[0-9]+', 'page' => 1, 'pass' => array('id')));

我需要知道如何消除 page:1 以使其可访问或自动重定向到 action/id,因为这种情况会导致 SEO 问题。

注意:我使用的是 CakePHP 1.2.10

也欢迎任何包含 .htaccess 的解决方案。

【问题讨论】:

  • 如果你使用canonical并且只是在这里使用主url作为url,这不是SEO问题。然后谷歌将只索引规范网址controller/action/id/
  • @mark 在我的应用程序中,我从不将 URL 与 page:1 一起使用。换句话说,我的应用程序上设置的每个分页链接都没有 page:1。在 Google 站长工具中,我发现一些关于页面标题重复的报告,例如 action/125/page:1 和 action/125/。真的,我不知道 Google 是如何得到 page:1 的!
  • 如果您转到第二页等,它可能会将 page:1 显示为链接。添加另一个规则来防止这种情况发生。

标签: apache .htaccess cakephp mod-rewrite cakephp-1.2


【解决方案1】:

如果我们不希望 page:1 在 1.x/2.x 中错误地路由,我们通常会使用另一个路由来解决这个问题:

Router::connect('/kuechen/alle', array('controller'=>'kitchens', 'action'=>'index_all'));
Router::connect('/kuechen/alle', array('controller'=>'kitchens', 'action'=>'index_all', 'page'=>1));
Router::connect('/kuechen/alle/*', array('controller'=>'kitchens', 'action'=>'index_all'));

注意第二个。

然后使用规范标签使 /index/ 不带 page:1 成为规范 url。完成。

【讨论】:

  • 是一样的。我不想使用 kuechen/alle/page:1 访问,换句话说,如果有 kuechen/alle/page:1 它应该被重定向到 kuechen/alle/
  • 这正是第二条路线的作用。
【解决方案2】:

我终于在this forum 上找到了答案。我必须在 app/webroot 中找到的 .htaccess 的第一行编写以下代码行

RewriteRule ^(.*)page:1(.*)$ /$1 [R=301,L]

最终的 .htaccess 将是:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)page:1(.*)$ /$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

重要通知:

如果您的应用程序位于服务器的子目录中 文档根目录,您必须将其添加到相关的代码行中, 否则会生成 404 not found。例如,假设 您的应用程序位于 /myapp 您正在使用它访问它 http://localhost/myapp/,所以重写规则是:

RewriteRule ^(.*)page:1(.*)$ /myapp/$1 [R=301,L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 2012-07-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多