2012-12-31 57 views
0

我看我的日誌與雙斜槓路由,一些用戶嘗試使用此URL格式來訪問我的網站:網址在CakePHP

http://mysite.com//home/article/123 

(注意域後雙斜槓)。 我希望這些執行相應的「單斜槓」網址的操作。 所以我嘗試添加像這樣的路線:

Router::connect('//home/article/:id/*', array(
    'controller'=>'article', 
    'action'=>'view'), 
    array('pass' => array('id'), 
    'id' => '[0-9]+', 
)); 

但我得到這個錯誤:

Error: [MissingPluginException] Plugin could not be found. 

我與這些重寫規則也試過:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ 
RewriteRule . %1/%2 [R=301,L] 

但是URL沒有改變,我得到了同樣的錯誤。

爲什麼這是錯的?我需要添加到cakephp路由(或Apache RewriteRule)的規則是什麼?

回答

0

路由器不重定向,它只是將urls映射到控制器操作。如果您想刪除//,請在網絡服務器上重寫。

+0

我願意在網絡服務器上這樣做,但怎麼做? – Giuppe

0

你需要在你的.htaccess中使用重寫規則來做到這一點。但是,您使用的重寫不會解決問題,因爲它只會在域名和第一個斜槓後刪除雙斜線。

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ 
RewriteRule . %1/%2 [R=301,L] 

此規則將只對URL的以下部分工作:

家/用品/ 123

因此,這將解決這個問題:

的http:// www.example.com/home//articles/123

但不是這樣:

http://www.example.com//home/articles/123

你需要做的是添加此規則來替代,或者還有另外一個,如果你需要修復這兩種情況下:

RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L] 
+0

此規則不起作用... – Giuppe

1

這是一個與緩存的問題。

在我的情況下,我在我的URL在Nginx服務器雙斜槓。 解決方案是刪除此緩存。 要做到這一點:

rm -rf /path/to/application/app/tmp 

現在,您需要重新創建位於tmp文件文件:

mkdir /path/to/application/app/tmp/cache 
mkdir /path/to/application/app/tmp/logs 
mkdir /path/to/application/app/tmp/purifier 

不要忘記檢查每個文件的權限,以避免錯誤,如警告(512) 。