0

我在日志中看到一些用户正在尝试使用这种 url 格式访问我的网站:

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)添加什么规则?

4

3 回答 3

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)等错误。

于 2017-04-27T12:12:54.703 回答
0

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

于 2013-01-01T09:25:22.650 回答
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]
于 2013-01-02T12:46:52.110 回答