2011-07-21 84 views
0

我正在使用CakePHP來處理我的PHP應用程序。CakePHP在重定向後從URL中刪除「?url =」

默認情況下它付諸.htaccess文件這樣的:

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

這個規則之後,我這樣做:

RedirectMatch ^/resources(.*)$ http://domain.com/community$1 [QSA,R=permanent,L] 

這使得重定向的URL:

http://domain.com/community/view/171/?url=resources/view/171/ 

如何在不破壞cakephp路由的情況下刪除附加的「?URL =」?

+0

你有沒有考慮過使用[CakePHP的路線] (http://book.cakephp.org/view/945/Routes-Configuration#Defining-Routes-948)而不是? – deizel

+0

在這方面,他們沒有做我想做的事,所以我使用了.htaccess。但是,如果你有路線建議,我全是耳朵。 – benhowdle89

+0

1)'RedirectMatch ^/resources(。*)$ ...'這是錯誤的。它應該是'RewriteRule'而不是'RedirectMatch' 2你應該在你的'RewriteRule ^(。*)$ index.php?url = $ 1 [QSA,L]'line – LazyOne

回答

1

如果我正確理解您的問題,您希望請求/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>