2010-08-04 54 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擴展甚至是你的控制器方法。

我希望它有幫助。

相關問題