Apache Cakephp中带双斜杠的Url路由
我在日志中看到,一些用户正试图使用以下url格式访问我的网站:Apache Cakephp中带双斜杠的Url路由,apache,cakephp,cakephp-2.0,Apache,Cakephp,Cakephp 2.0,我在日志中看到,一些用户正试图使用以下url格式访问我的网站: http://mysite.com//home/article/123 (注意域后面的双斜杠)。 我想让它们执行相应的“单斜杠”URL的操作。 所以我试着添加这样一条路线: Router::connect('//home/article/:id/*', array( 'controller'=>'article', 'action'=>'view'), array('pass' => ar
http://mysite.com//home/article/123
(注意域后面的双斜杠)。
我想让它们执行相应的“单斜杠”URL的操作。
所以我试着添加这样一条路线:
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重写规则)添加什么规则?路由器不重定向,它只是将URL映射到控制器操作。如果要删除
/
,请在Web服务器上执行此操作。请使用.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]
这是缓存的问题 在我的例子中,我在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)之类的错误。我愿意在Web服务器上执行此操作,但如何执行?