如何将.html附加到cakephp中的所有URL?

如何将.html附加到cakephp中的所有URL?,php,cakephp,routing,url-rewriting,Php,Cakephp,Routing,Url Rewriting,我在我的一个项目中使用cakephp,我的客户希望站点URL以.html结尾,而不是通常友好的URL。我想知道在cakephp中是否可以通过任何路由技术来实现这一点。请帮忙。根据您的情况,您可以这样做 Router::connect('/(.*.html',数组('controller'=>'页面','action'=>'显示') 但是,当您谈论扩展时,可能会产生其他后果。您还需要将html扩展与Apache中的PHP模块相关联。我不记得需要做什么调整,但它会在/etc/httpd/httpd.

我在我的一个项目中使用cakephp,我的客户希望站点URL以.html结尾,而不是通常友好的URL。我想知道在cakephp中是否可以通过任何路由技术来实现这一点。请帮忙。

根据您的情况,您可以这样做

Router::connect('/(.*.html',数组('controller'=>'页面','action'=>'显示')


但是,当您谈论扩展时,可能会产生其他后果。

您还需要将html扩展与Apache中的PHP模块相关联。我不记得需要做什么调整,但它会在/etc/httpd/httpd.conf文件中。(此文件可能位于稍有不同的位置,具体取决于服务器的操作系统。)只需查找将.php与php模块关联的行即可。我相信您也可以在.htaccess文件中定义这一点,但是天气与否取决于您在httpd.conf文件中可以做什么

可以发送到Router::url()的参数之一是“ext”(由其他方法调用,如HtmlHelper::link()和Controller::redirect())。尝试将其设置为“html”。例如:

echo $this->Html->link('Products', array('controller' => 'products', 'action' => 'index', 'ext' => 'html'));


如果它能工作,请尝试找出一种方法,可以覆盖Router::url(),在默认情况下将其添加到中。

这在中有详细的说明

更新:

要使用路由处理不同的文件扩展名,您需要一个 路由配置文件中的额外行:

如果您想创建一个URL,如/page/title-of-page.html,您可以 如下图所示创建路线:

然后,要创建映射回路线的链接,只需使用:


必须在不使用路由的情况下解决此问题。保留页面的默认路由条目:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
在显示操作中,删除了.html扩展名并呈现了相应的视图:

preg_replace('/\.html$/','',$view);
$this->render(null,'default',$view);
当调用添加了“ext”的页面为.html时,如文档部分所述,您可以使用:

Router::parseExtensions('html', 'rss');

这将告诉路由器删除任何匹配的文件扩展名,然后解析剩余的文件扩展名。

非常简单,打开app/config/routes.php文件,只需添加

Router::parseExtensions('html', 'rss');
越界

 Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
现在,您甚至可以使用.html扩展名访问控制器方法


我希望它能有所帮助。

这是不必要的,因为Apache只会将所有内容通过Cake、extension和all进行路由,因为实际上不存在任何.html文件。如果你有需要PHP处理的物理HTML文件,你只需要做你描述的事情,这里不是这样。另外,我建议你向你的客户解释为什么它很重要。听起来客户可能需要更多的教育。我想不出为什么需要.html扩展名。有谁能启发我吗?这是一个搜索引擎优化的事情。当搜索引擎爬虫找到一个扩展名为.html的页面时,它会假定它是一个静态页面,并给它更多的排名。我不确定这些天现代爬虫是否也在遵循这一点,但我的客户想要它,所以我不得不给它:)嗨,卢卡斯·海内克斯,谢谢你的链接。我试过了,但似乎对我不起作用。。。它给了我缺少控制器的错误。我认为一定有更好的方法可以将.html添加到所有控制器的操作中,而不是手动向每个控制器提供ext=>'html'。此外,如果要打开/关闭.html扩展名,则转到所有控制器并手动添加/删除ext参数是没有意义的。如果有人想开启/关闭Joomla-like seo,你会怎么说?@RNKushwaha:如果你的评论是这样的话,你可以在AppHelper::url()中的每个链接中插入文件扩展名。在Cakephp 3中,你可以使用发送给url Helper的参数“\u ext”。[见更多-
preg_replace('/\.html$/','',$view);
$this->render(null,'default',$view);
Router::parseExtensions('html', 'rss');
Router::parseExtensions('html', 'rss');
 Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));