【问题标题】:301 Redirects in CakePHP 3CakePHP 3 中的 301 重定向
【发布时间】:2020-04-26 23:03:39
【问题描述】:

我是 CakePHP 的新手。我有一个由其他人在 CakePHP 3.3.16 中构建的网站。有指向 website.com/page 和 website.com/page/ 的链接。

在不影响可能以 /page/ 开头的任何其他内容的情况下,将 /page/ 重定向到 /page 的最佳方法是什么?

route.php 有这个...

$routes->connect('/page/*', ['controller' => 'Page', 'action' => 'something']);

然后我有一个 PageController.php 有

public function something($site_id = null)
{
...
}

这可以在 routes.php 中使用吗?我如何指定这是一个 301 重定向?

use Cake\Routing\RouteBuilder;
Router::scope('/', function (RouteBuilder $routes) {
      $routes->redirect('/page/','http://website.com/page');
      $routes->connect('/page/?*', ['controller' => 'Page', 'action' => 'something']);
   });

这似乎在 .htaccess 中不起作用(/page/ 显示且未重定向)...

Redirect 301 /page/ http://website.com/page
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

【问题讨论】:

    标签: php redirect cakephp http-status-code-301


    【解决方案1】:

    首先要解决这个问题,而不是将Route::scope 放在Router::connect 和Router::redirect imo 上。 因此,解决方案的方法首先是做这样的事情。

     Router::connect('/page/*', ['controller' => 'Page', 'action' => 'something']);
    

    然后你用 cake 命令重定向页面重定向:

     Router::redirect('/page/','/page', array('status' => 301));
    

    在我使用的 CakePhp 2.6 项目中,我总是根据任务重定向这样的页面。有时您可以在 Controller 中执行这种类型的重定向,但最好避免它,因为它不会将路由与编程逻辑混为一谈。

    【讨论】:

    • 有道理,谢谢。问题:redirect() 是否必须在 connect() 之前,否则 /page/ 会转到控制器?
    • 我总是把重定向放在connect() 之后,而且就我个人而言,它总是像这样完美地工作。
    • 规则不匹配,因为 /page/* != /page/,它需要 /page/text 才能匹配。允许您捕获 /page/ 并根据需要重定向到 /page。它可以高于或低于
    猜你喜欢
    • 2012-03-13
    • 2014-08-30
    • 2014-05-05
    • 2014-11-13
    • 2015-09-06
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多