yii 带有编码斜杠的URL转到404

xriantvc  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(135)

我使用用户提供的内容来生成URL。
我的一个URL有标题Kikar Habusiness - émission du 2/12/12,它转换为URL /url/Kikar+Habusiness+-+émission+du+2%2F12%2F12
它转到404。如果我从URL中删除%2F,它将正常工作。
有趣的是,我的php代码(使用Yii)通常用自定义页面处理404,但这一次返回的是默认的Apache 404,这让我相信它甚至没有到达我的引导文件。
.htaccess的内容如下:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

我的Yii parseUrl是这样的:

public function parseUrl($manager, $request, $pathInfo, $rawPathInfo) {
        if(preg_match('%^url/(\d+)%',$pathInfo,$matches)){
            $_GET['id'] = $matches[1];
            return 'url/view';
        }
        else if(preg_match('%^category/(\d+)%',$pathInfo,$matches)){
            $_GET['id'] = $matches[1];
            return 'category/view';
        }
        return false;
    }

我的URL插件生成器是:

public static function slug($title){
        $title = ToolBox::trim($title,60,false);
        $title = urlencode($title);
        return $title;
    }

请注意,我不能有基本的ASCII网址,因为有些内容是非拉丁语(如希伯来语或阿拉伯语)。

xpcnnkqh

xpcnnkqh1#

这是Apache中的一个常见问题,幸运的是与Yii无关。
Apache会自动拦截任何含有% 2F(/)和% 5C(\)编码部分的URL。它甚至不会触及任何mod_proxy或mod_rewrite规则。
根据您的环境,有许多方法可以解决这个问题,而不需要更改太多代码,包括:

  • “允许编码斜杠”指令
  • 双精度urlencode()

有关完整列表和说明,请参阅此处:http://www.jampmark.com/web-scripting/5-solutions-to-url-encoded-slashes-problem-in-apache.html

更多信息,因为链接已关闭

如果你可以访问它,你可以启用AllowEncodedSlashes指令,这是一个非常古老的半安全修复程序,它在默认情况下是关闭的。这将解决这个问题。如果你不能访问Apache配置,那么你将不得不寻找其他解决方案。

yv5phkfx

yv5phkfx2#

jampark url重定向到错误的页面,请使用下面的url:http://www.leakon.com/archives/865

相关问题