在Cakephp中使用双斜杠进行URL路由

时间:2012-12-31 17:17:29

标签: apache cakephp cakephp-2.0

我在日志中看到有些用户正在尝试使用此网址格式访问我的网站:

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]

但是网址没有改变,我得到了同样的错误。

为什么这是错的?我需要在cakephp路由(或Apache RewriteRule)中添加什么规则?

3 个答案:

答案 0 :(得分:1)

缓存存在问题。

在我的情况下,我在Nginx服务器上的URL中有双斜杠。 解决方案是删除此缓存。 要做到这一点:

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)。

答案 1 :(得分:0)

路由器不重定向,只是将网址映射到控制器操作。如果您要删除//,请在网络服务器上重写。

答案 2 :(得分:0)

您需要在.htaccess中使用重写规则执行此操作。但是,您正在使用的重写不会解决问题,因为它只会删除域名后的双斜线和第一个斜杠。

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

此规则仅适用于网址的以下部分:

主/物品/ 123

所以它会解决这个问题:

<强> http://www.example.com/home//articles/123

但不是这样:

<强> http://www.example.com//home/articles/123

如果您需要修复这两种情况,您需要做的是添加此规则,或者添加另一个规则:

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