.htaccess CakePHP删除“;?url=";从重定向后的URL

.htaccess CakePHP删除“;?url=";从重定向后的URL,.htaccess,cakephp,url-rewriting,.htaccess,Cakephp,Url Rewriting,我正在为我的PHP应用程序使用CakePHP 默认情况下,它会将其放入.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=resou

我正在为我的PHP应用程序使用CakePHP

默认情况下,它会将其放入.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=”

如果我正确理解了您的问题,您希望将对
/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之外(即,反向路由的链接变成
/community
,而不是
/community/index


在LazyOne的评论之后,如果您也希望重定向旧的
/resources*
-样式的链接以用于SEO目的,那么下面应该可以做到这一点:

# 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>
#app/webroot/.htaccess
重新启动发动机
重写规则^/resources(.*)$/community$1[R=301,L]#永久重定向
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$index.php?url=$1[QSA,L]

您考虑过使用吗?在这方面,他们没有做我想做的事情,所以我使用了.htaccess。但是如果你有一个路由建议,我洗耳恭听。1)
RedirectMatch^/resources(.*)$…
这是错误的。它应该是
RewriteRule
而不是
RedirectMatch
2)您应该在
RewriteRule^(.*)$index.php?url=$1[QSA,L]
行上方有此规则