.htaccess 从URL中删除模式并301重定向到新URL

.htaccess 从URL中删除模式并301重定向到新URL,.htaccess,cakephp,redirect,routes,rewrite,.htaccess,Cakephp,Redirect,Routes,Rewrite,假设如下: mywebsite.com/searches/index/page:x where x is an integer. 我想删除索引/并重定向到 mywebsite.com/searches/page:x 我的web应用程序基于CakePHP,我在webroot目录中的.htaccess文件中添加了以下行,但没有得到任何结果 RewriteRule ^(.*)/searches/index/(.*)$ searches/$1 [R=301,L] 我需要知道我应该使用正确的.ht

假设如下:

mywebsite.com/searches/index/page:x  where x is an integer.
我想删除索引/并重定向到

mywebsite.com/searches/page:x
我的web应用程序基于CakePHP,我在webroot目录中的.htaccess文件中添加了以下行,但没有得到任何结果

RewriteRule ^(.*)/searches/index/(.*)$ searches/$1 [R=301,L]
我需要知道我应该使用正确的.htaccess代码。

然而,我问这个问题是因为谷歌网站管理员工具告诉我有很多软错误。在我的应用程序routes中,我忽略了通过routes.php中的以下行调用索引页面:

 Router::connect('/searches/index/*', array('controller' => 'error','action'=>'e404'));
Router::connect('/searches', array('controller' => 'searches', 'action' => 'index','page' => 1)); 
Router::connect('/searches/*', array('controller' => 'searches', 'action' => 'index')); 
因此,如果有另一种解决方案可以从CakePHP中解决谷歌问题,我将非常感激知道这一点


我的蛋糕版本是1.2.11。

规则开头的组将使规则匹配URI,如
mywebsite.com/searches/index/page:x
,以及URI,如
mywebsite.com/foobar/searches/index/page:x
。看起来这不是你想要的

此外,您正在为替换模式中的第一个组使用,这会导致新URL从不包含
页面:x
部分。相反,对于类似
mywebsite.com/searches/index/page:x的URI,它将重定向到
mywebsite.com/searches/searches
;对于类似
mywebsite.com/foobar/searches/index/page:x的URI,它将重定向到
mywebsite.com/searches/foobar

我认为你的规则应该更像这样:

RewriteRule ^/?searches/index/(.*)$ /searches/$1 [R=301,L]

请注意,除了删除第一组之外,我还将模式中的前导斜杠设置为可选,因为它是可选的,并且我在替换部件中添加了一个前导斜杠,以确保它将重定向到根。

这是被否决的原因吗?如果能知道答案有什么问题,我会很高兴,这样我就可以纠正可能出现的错误、歧义等。