2013-07-01 28 views
0

假設如下:刪除模式和301重定向到新的URL

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的谷歌問題,我可以理解的知道這一點。

我的蛋糕版本是1.2.11。

回答

1

規則開始處的組將導致規則匹配URI,如mywebsite.com/searches/index/page:x以及URI,如mywebsite.com/foobar/searches/index/page:x。它看起來並不像你想要的那樣。

此外,您正在利用backreference替換您的替換模式中的第一個組,導致新的URL永遠不會包含page:x部件。相反,它將針對類似mywebsite.com/searches/index/page:x的URI重定向至mywebsite.com/searches,針對類似mywebsite.com/foobar/searches/index/page:x的URI重定向至mywebsite.com/searches/foobar

我想你的規則應該更是這樣的:

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

注意,除了刪除了第一集團,我也是在模式可選取得了領先的斜線,因爲它是forbidden with Apache 2.x, while it's necessary with Apache 1.x,我已經在替換部分添加了一個前導斜槓,以確保它將重定向到根目錄。

+0

這是否被拒絕投票?很高興知道答案出了什麼問題,以便我可以糾正可能出現的錯誤,含糊之處等。 – ndm

+0

+1投票它回答所需的問題! – Termis