2017-05-29 88 views
0

我正在CakePHP 3的博客式網站上工作,併爲SEO目的制定了帶尾部斜線的規範化URL結構。爲了實現這一點,我在路由文件中構建了匹配尾部斜槓的請求,並在webroot.htaccess中做出正確的重定向以處理沒有結尾斜槓的請求。此外,在AppController我重寫重定向功能,從控制器管理的重定向:在CakePHP 3中構建幫助器的URL時添加尾部斜槓3

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); 
} 

到目前爲止,一切都很好。

現在,我希望每次使用助手構建它們時都要創建帶有斜線的URL,例如FormHelperHtmlHelper。例如:

$this->Form->create(null, [ 
    'url' => ['controller' => 'Messages', 'action' => 'send'] 
]); 

在這種情況下,URL輸出將爲:

/消息/發送

,我需要它是:

/消息/發送/

此刻,我在助手的選項中對網址進行了硬編碼以使其可以正常工作(而不是生產尚未)。如果我使用示例的選項,當提交表單時,由於.htaccess重定向規則,POST數據丟失,因此在提交表單時,它將/messages/send重定向到/messages/send/

在此先感謝,我爲我可憐的英語表示歉意,希望自己清楚。

+2

只是不這樣做,無論您使用帶或不帶斜線的網址[**對搜索引擎優化**沒有影響](https://webmasters.googleblog.com/2010/04/to-slash-or -not-to-slash.html),只要確保你始終堅持一個或另一個。 – ndm

+0

謝謝您的建議。可能我沒有正確表達自己。當我說「出於搜索引擎優化的目的」時,我的意思是我想堅持使用尾部的斜槓網址結構,而不是尾部的斜線本身會幫助我的搜索引擎優化。 – libarra

+0

我同意@ndm - 但請參閱https://github.com/dereuromark/cakephp-trailing-slash – mark

回答

0

我建議您create an alias爲您的Helper和調整URL的建設。

的src /查看/ AppView.php

class AppView extends View 
{ 
    public function initialize() 
    { 
     $this->loadHelper('Url', [ 
      'className' => 'MyUrl' 
     ]); 
    } 
} 

的src /查看/助手/ MyUrlHelper.php

namespace App\View\Helper; 

use Cake\View\Helper\UrlHelper; 

class MyUrlHelper extends HtmlHelper 
{ 
    public function build($url = null, $options = false) 
    { 
     // Add your code to override the core UrlHelper build() function 

     return $url; 
    } 
} 

找到UrlHelperhere的原始來源。

+0

非常感謝!那正是我需要的。我不得不改變'MyUrlHelper.php'的一小部分工作:我添加了'使用Cake \ Routing \ Router'並從'UrlHelper'擴展'MyUrlHelper',而不是從'HtmlHelper'擴展。再次感謝!這是一個很好的解決方案。 – libarra

+0

不客氣。很高興它適合你。 – Mary

0

如果你想在行動的末尾添加/,你可以嘗試一下:

$this->Form->create(null, [ 
    'url' => $this->Url->build('/Messages/send/', true) 
]); 

又見

+0

我已經有了這樣的URL來工作,但我需要的是使用控制器和操作選項製作帶有斜槓的URL。 ['controller'=>'Messages','action'=>'send'] 我想這樣做是爲了避免跟蹤每個通過此方法設置的URL,以防我決定更改請求別名未來 – libarra