.htaccess CakePHP删除“;?url=";从重定向后的URL
我正在为我的PHP应用程序使用CakePHP 默认情况下,它会将其放入.htaccess文件中:.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
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]
行上方有此规则