0

假设如下:

mywebsite.com/searches/index/page:x  where x is an integer.

我想删除 index/ 并重定向到

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。

4

1 回答 1

1

规则开头的组将导致规则匹配 URIs likemywebsite.com/searches/index/page:x以及 URIs like mywebsite.com/foobar/searches/index/page:x. 看起来这不是你想要的。

此外,您正在使用替换模式中第一组的反向引用page:x,这会导致新 URL 永远不会包含该部分。相反,它将重定向到mywebsite.com/searchesURI 之类的 URI mywebsite.com/searches/index/page:x,以及mywebsite.com/searches/foobarURI 之类的mywebsite.com/foobar/searches/index/page:x.

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

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

请注意,除了删除第一组之外,我还将模式中的前导斜杠设为可选,因为它在 Apache 2.x 中被禁止,而在 Apache 1.x 中是必需的,并且我在替换中添加了前导斜杠部分以确保它将重定向到根目录。

于 2013-07-01T01:27:24.497 回答