页面的特殊路由:CakePHP分页中的1

时间:2013-04-22 14:04:36

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

我修改了CakePHP的paginator帮助程序,打印出没有页面的第一页链接,例如:

  

myexample.com/controller/action/id/page:1会是的   myexample.com/controller/action/id/和任何其他页面页面: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')));

我需要知道如何消除页面:1 可访问或自动重定向到action / id这种情况会导致SEO问题。

注意:我使用CakePHP 1.2.10

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

2 个答案:

答案 0 :(得分:2)

如果我们不希望页面: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 /不带页面:1规范网址。完成。

答案 1 :(得分:0)

最后我在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未找到。例如,说明   您的应用程序位于/ myapp,您正在使用它访问它   http://localhost/myapp/,所以重写规则将是:

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