我在日志中看到有些用户正在尝试使用此网址格式访问我的网站:
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)中添加什么规则?
答案 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]