2010-08-04 29 views
5

我在我的一个项目中使用了cakephp,我的客户希望网站URL以.html结尾,而不是通常的友好网址。我想知道它是否可能通过任何路由技术在cakephp中实现。请帮忙。如何将.html附加到cakephp中的所有网址?

+0

另请参见[在CakePHP中为每个URL添加前缀](http://stackoverflow.com/questions/1794412/adding-a-prefix-to-every-url-in-cakephp) – deceze 2010-08-05 01:42:24

+0

我建议你解释一下你的客户为什么它的重要 – 2010-08-05 17:27:18

+0

这听起来像客户可能需要更多的教育。我想不出任何为什么需要.html扩展名的原因。任何人都可以启发我吗? – 2010-08-06 03:43:16

回答

2

必须解决这一不使用航线。保持页的默认路由条目:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

,并在显示动作除去.html扩展和再现的相应视图:

preg_replace('/\.html$/','',$view); 
$this->render(null,'default',$view); 

虽然调用页面添加“分机”是。HTML

2

根据this page,你可以做这样的事情

Router::connect('/(.*).html', array('controller' => 'pages', 'action' => 'display'));

但正如你所谈论的扩展,可能有其他后果。

+0

嗨Lucas Heneks,感谢您的链接。我尝试过,但它似乎并没有为我工作...它给我失踪的控制器错误。 – 2010-08-05 11:21:19

0

您将需要将html扩展与Apache中的PHP模块关联。我不记得所需的调整,但它将在/etc/httpd/httpd.conf文件中。 (根据您的服务器的操作系统,此文件可能略有不同)。只需查找将.php与PHP模块关联的行即可。我相信你也可以在.htaccess文件中定义这个,但是不管天气与否,你都可以依赖于你在httpd.conf文件中允许做什么。

+0

这将不是必须的,因为Apache只会通过Cake,扩展和全部路由所有内容,因为没有任何.html文件实际存在。如果您有想由PHP处理的物理HTML文件,则只需执行所描述的内容即可,在此情况并非如此。 – deceze 2010-08-05 01:41:51

5

您可以发送到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()默认情况下添加进去。

+0

在Cakephp 3中,您可以使用发送给Url Helper的参数'_ext'。 [看更多 - https://book.cakephp.org/3.0/en/views/helpers/url.html] – nsbm 2017-03-07 12:14:02

12

这在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') 
); 
+0

我认为必须有更好的方法,可以将.html添加到所有控制器的操作中,而不是提供ext => '手动'给每个控制器。另外,如果想打开/关闭.html扩展,则转到所有控制器并手动添加/删除ext参数是没有意义的。如果有人想让Joomla开启/关闭,你觉得怎么样? – 2014-09-14 13:29:41

+0

@RNKushwaha:如果你的意见是你的意思,你可以在AppHelper :: url()的每个链接中注入文件扩展名。 – bancer 2014-09-22 19:36:22

2

由于Routes Configuration - File extensions文档节说,你可以使用:

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

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

0

它很简单,打开文件app /配置/ routes.php文件,只是添加

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

以上线路

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 

现在,您可以访问HTML扩展甚至是你的控制器方法。

我希望它有帮助。

相关问题