如果我正確理解您的問題,您希望請求/community/*
路由到ResourcesController
。您應該可以通過將以下內容添加到您的app/config/routes.php
中來達到此目的。
/**
* Rename /resources/* to /community/*
*/
Router::connect('/community', array('controller' => 'resources'));
Router::connect('/community/:action/*', array('controller' => 'resources'));
第二條規則做了大部分的魔法,映射匹配請求到ResourcesController
並傳入動作也。
通過上述方法,你也可以採取反向路由的優勢:
echo $this->Html->link('View community', array(
'controller' => 'resources',
'action' => 'view',
$id
));
// outputs a link to `/community/view/171`
第一條規則是根本沒有,保持動作的名字在根URL(即如此HtmlHelper
鏈接,都是反向 - 變成/community
而不是/community/index
)。
上LazyOne的評論跟進,如果你也在尋找重定向搜索引擎優化的目的,老/resources*
風格的鏈接,下面應該做的伎倆:
# app/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/resources(.*)$ /community$1 [R=301,L] # permanent redirect
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
你有沒有考慮過使用[CakePHP的路線] (http://book.cakephp.org/view/945/Routes-Configuration#Defining-Routes-948)而不是? – deizel
在這方面,他們沒有做我想做的事,所以我使用了.htaccess。但是,如果你有路線建議,我全是耳朵。 – benhowdle89
1)'RedirectMatch ^/resources(。*)$ ...'這是錯誤的。它應該是'RewriteRule'而不是'RedirectMatch' 2你應該在你的'RewriteRule ^(。*)$ index.php?url = $ 1 [QSA,L]'line – LazyOne