我正在用CakePHP 3开发一个类似于博客的网站,并为SEO的目的创建了带有一个尾部斜杠的规范URL结构。为了实现这一点,我在routes文件中创建了与尾部斜杠匹配的请求,并在webroot
.htaccess
中创建了正确的重定向来处理没有尾部斜杠的请求。此外,在AppController
中,我覆盖了重定向函数,以管理来自控制器的重定向:
function redirect($url, $status = null, $exit = true)
{
$routerUrl = Router::url($url, true);
if(!preg_match('/\.[a-z0-9]{1,5}$/', strtolower($routerUrl)) && substr($routerUrl, -1) != '/') {
$routerUrl .= '/';
}
parent::redirect($routerUrl, $status, $exit);
}
到目前为止,一切顺利。
现在,我希望在每次使用Helper构建URL时,都使用一个尾随斜杠,比如FormHelper
或HtmlHelper
。例如:
$this->Form->create(null, [
'url' => ['controller' => 'Messages', 'action' => 'send']
]);
这种情况下的URL输出为:
/消息/发送
而我需要的是:
/消息/发送/
目前我正在Helper的选项中硬编码URL以使其工作(尚未投入生产)。如果我使用示例的选项,当提交表单时,它会将**/messages/send重定向到/messages/send/**,因为.htaccess
重定向规则和POST数据丢失。
提前谢谢你,我为我糟糕的英语道歉,我希望我说的很清楚。
3条答案
按热度按时间68bkxrlz1#
我建议为您的
Helper
创建一个别名,并调整URL构建。源代码/视图/应用程序视图.php
源代码/视图/帮助程序/MyUrlHelper.php
在这里找到
UrlHelper
的原始源代码。fnatzsnv2#
如果你想在动作的末尾添加一个
/
,你可以试试:另请参阅
ndasle7k3#
我用三个字符解决了它:)...
1-打开\vendor\cakephp\cakephp\src\View\Helper\UrlHelper.php 2-转到构建函数并将.“/”添加到返回的$url,如下所示
它看起来应该像return $url.“/”;
而不是返回$url;
我知道这是肮脏的解决方案,不好编辑核心...我认为你最好覆盖构建函数...
我希望有更好的办法