0

我修改了 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 的解决方案。

4

2 回答 2

2

如果我们不希望 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/ without page:1 成为规范网址。完毕。

于 2013-04-22T14:45:44.957 回答
0

最后我在这个论坛上找到了答案。我必须在 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]
于 2013-04-25T23:35:06.017 回答