假设以下内容:
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代码。
然而,我问了这个问题,因为谷歌网站管理员工具告诉我有很多软401错误。在我的应用程序路由中,我省略了在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中的Google问题,我将不胜感激。
我的蛋糕版本是1.2.11。
答案 0 :(得分:1)
规则开头的组将使规则匹配mywebsite.com/searches/index/page:x
之类的URI以及mywebsite.com/foobar/searches/index/page:x
之类的URI。它看起来不像你想要的那样。
此外,您正在使用backreference作为替换模式中的第一个组,这会导致新网址永远不会包含page:x
部分。相反,它会重定向至mywebsite.com/searches
以获取mywebsite.com/searches/index/page:x
之类的URI,并重定向至mywebsite.com/searches/foobar
以获取类似mywebsite.com/foobar/searches/index/page:x
的URI。
我认为你的规则应该更像这样:
RewriteRule ^/?searches/index/(.*)$ /searches/$1 [R=301,L]
请注意,除了删除第一个组之外,我还在模式中选择了前导斜杠,因为它是forbidden with Apache 2.x, while it's necessary with Apache 1.x,并且我在替换部分中添加了一个前导斜杠以确保它将重定向到根。