我修改了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的解决方案也会受到欢迎。
答案 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]