【发布时间】:2015-01-14 12:49:19
【问题描述】:
我正在寻求构建规则以将 URL 从旧站点重定向到使用 CakePHP 2.5 构建的全新站点
最初我打算编写 .htaccess 规则(虽然不完全清楚要使用 3 个规则中的哪一个),直到我想到我应该能够在 routes.php 中创建 301 重定向规则作为 @987654321 @解释。
不幸的是,虽然设置将 www.example.com/page.php 重定向到 www.example.com/page 的规则相当简单,但为包含查询字符串的 URL 设置规则却有点棘手。
例如,不幸的是,当原始页面的格式类似于 www.example.com /things_page.php?page_no=1 我可以将其重定向到 www.example.com/things 但我无法继续分页。为此我使用了:
Router::redirect('/things_page.php?page_no=:page', array('controller' => 'things', 'action' => 'index', ':page' => 'page:[0-9]+'),array('persist' => true, 'status' => 301));
从我主要围绕 SO 的类似主题收集的内容中得出。不幸的是,我无法让框架将查询字符串解释为用于重定向 url 的数据。
我在某处读到,实际上在 Cake 中不可能将查询字符串转换为 Cake 可以在 Router::redirect() 语句中解释的干净路径,但考虑到我不能这样做,这让我觉得很奇怪一个独特的案例,我需要将旧链接翻译成与 Cake 兼容的路径。
如果我可以避免使用 .htaccess 路线,我更愿意这样做以方便维护,但如果这是我需要确定要编辑 3 个 .htaccess 文件中的哪一个的唯一方法。
干杯
编辑: 最后,我在一个法语论坛中找到了一个折衷方案,它建议在 AppController 的 beforefilter() 函数中添加一条规则,如下所示:
public function beforeFilter(){
if (isset($_GET['id'])) {
$this->redirect(array('controller' => 'things', 'action' => 'view', $_GET['id']));.
}
}
我用 $_SERVER['REQUEST_URI'] 的字符串搜索来补充我的代码,以便在多个页面使用相同的 $_GET 变量时隔离 things_page.php。这有点粗糙,但它有效
【问题讨论】:
标签: .htaccess cakephp redirect query-string http-status-code-301