我在我的一个项目中使用了cakephp,我的客户希望网站URL以.html结尾,而不是通常的友好网址。我想知道它是否可能通过任何路由技术在cakephp中实现。请帮忙。如何将.html附加到cakephp中的所有网址?
回答
必须解决这一不使用航线。保持页的默认路由条目:
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
,并在显示动作除去.html扩展和再现的相应视图:
preg_replace('/\.html$/','',$view);
$this->render(null,'default',$view);
虽然调用页面添加“分机”是。HTML
根据this page,你可以做这样的事情
Router::connect('/(.*).html', array('controller' => 'pages', 'action' => 'display'));
但正如你所谈论的扩展,可能有其他后果。
嗨Lucas Heneks,感谢您的链接。我尝试过,但它似乎并没有为我工作...它给我失踪的控制器错误。 – 2010-08-05 11:21:19
您将需要将html扩展与Apache中的PHP模块关联。我不记得所需的调整,但它将在/etc/httpd/httpd.conf文件中。 (根据您的服务器的操作系统,此文件可能略有不同)。只需查找将.php与PHP模块关联的行即可。我相信你也可以在.htaccess文件中定义这个,但是不管天气与否,你都可以依赖于你在httpd.conf文件中允许做什么。
这将不是必须的,因为Apache只会通过Cake,扩展和全部路由所有内容,因为没有任何.html文件实际存在。如果您有想由PHP处理的物理HTML文件,则只需执行所描述的内容即可,在此情况并非如此。 – deceze 2010-08-05 01:41:51
您可以发送到Router :: url()(通过其他方法(如HtmlHelper :: link()和Controller :: redirect())调用的参数之一是'ext'。尝试将其设置为'html'。 E.g:
echo $this->Html->link('Products', array('controller' => 'products', 'action' => 'index', 'ext' => 'html'));
或
$this->redirect(array('controller' => 'products', 'action' => 'index', 'ext' => 'html'));
如果一切正常,尽量想办法,你可以覆盖路由器:: URL()默认情况下添加进去。
在Cakephp 3中,您可以使用发送给Url Helper的参数'_ext'。 [看更多 - https://book.cakephp.org/3.0/en/views/helpers/url.html] – nsbm 2017-03-07 12:14:02
这在cookbook中有详细记录。
UPDATE:http://book.cakephp.org/2.0/en/development/routing.html#file-extensions
要与你的路由处理不同的文件扩展名,你需要一个 额外的行你的路由配置文件:
Router::parseExtensions('html', 'rss');
如果你想创建一个网址如/page/title-of-page.html你会 创建你的路线如下图所示:
Router::connect(
'/page/:title',
array('controller' => 'pages', 'action' => 'view'),
array(
'pass' => array('title')
)
);
然后创建其映射回路线链接简单地使用:
$this->Html->link(
'Link title',
array('controller' => 'pages', 'action' => 'view',
'title' => 'super-article', 'ext' => 'html')
);
我认为必须有更好的方法,可以将.html添加到所有控制器的操作中,而不是提供ext => '手动'给每个控制器。另外,如果想打开/关闭.html扩展,则转到所有控制器并手动添加/删除ext参数是没有意义的。如果有人想让Joomla开启/关闭,你觉得怎么样? – 2014-09-14 13:29:41
@RNKushwaha:如果你的意见是你的意思,你可以在AppHelper :: url()的每个链接中注入文件扩展名。 – bancer 2014-09-22 19:36:22
由于Routes Configuration - File extensions文档节说,你可以使用:
Router::parseExtensions('html', 'rss');
这将告诉路由器,以消除任何匹配的文件扩展名,然后解析剩下。
它很简单,打开文件app /配置/ routes.php文件,只是添加
Router::parseExtensions('html', 'rss');
以上线路
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
现在,您可以访问HTML扩展甚至是你的控制器方法。
我希望它有帮助。
- 1. CakePHP的附加网址
- 2. 如何附加到字符串中的所有网址?
- 3. 想要将参数自动附加到所有网址中 - PHP
- 4. HTML网址 - 如何追加到现有的网址
- 5. 如何将所有网址重定向到不同的网址?
- 6. 如何将文件附加到Android中的发布网址
- 7. 将字符串附加到firebase网址
- 8. 将表单字段附加到网址
- 9. 将下拉值附加到网址
- 10. 如何将大网址变成带有附加参数的较小网址?
- 11. 具有.html扩展名的CakePHP网址
- 12. 在Cakephp的所有网址中添加一个子域
- 13. htaccess重定向将旧网址附加到新网址
- 14. 将查询字符串附加到所有使用.htaccess的网址
- 15. 如何在CakePHP的所有菜单网址中添加动态国家名称?
- 16. 如何添加所有网址以zendesk api开始的所有网址
- 17. 将一些参数添加到WordPress的所有网址中
- 18. 如何在页面上将所有网址添加到xcode中的数组?
- 19. 如何将用户标识附加到代码点火器中的网址?
- 20. 如何提取所有具有.html末尾的网址?
- 21. 将行为附加到所有型号
- 22. 如何将一个数组的所有元素附加到div
- 23. 将HTML附加到Express中的路由
- 24. 如何将php添加到网址?
- 25. 如何将网址添加到书签?
- 26. 将html附加到QWebView?
- 27. 将HTML附加到UIWebView
- 28. SmartGWT,将HTML附加到HTMLPane
- 29. 如何将Expression.Lambda附加到任何所有者类型?
- 30. 如何从网址|中删除所有.html Nignx
另请参见[在CakePHP中为每个URL添加前缀](http://stackoverflow.com/questions/1794412/adding-a-prefix-to-every-url-in-cakephp) – deceze 2010-08-05 01:42:24
我建议你解释一下你的客户为什么它的重要 – 2010-08-05 17:27:18
这听起来像客户可能需要更多的教育。我想不出任何为什么需要.html扩展名的原因。任何人都可以启发我吗? – 2010-08-06 03:43:16