我正在使用CakePHP作为我的PHP应用程序。
默认情况下,它会将其放入.htaccess文件中:
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
遵循这条规则,我这样做:
RedirectMatch ^/resources(.*)$ http://domain.com/community$1 [QSA,R=permanent,L]
这会重定向网址:
http://domain.com/community/view/171/?url=resources/view/171/
如何在不破坏cakephp路由的情况下摆脱附加的“?URL =”?
答案 0 :(得分: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
。 / p>
跟进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>