2

我使用用户提供的内容来生成 URL。

我的一个 URL 有标题Kikar Habusiness - émission du 2/12/12,它转换为 URL /url/Kikar+Habusiness+-+émission+du+2%2F12%2F12

它进入 404。如果我%2F从 URL 中删除它,它工作正常。

一个有趣的事情是我的 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 slug 生成器是:

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

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

4

2 回答 2

4

这是 Apache 中的常见问题,幸运的是与 Yii 无关。

Apache 将自动阻止它看到的带有编码 URL 部分 %2F (/) 和 %5C (\) 的任何 URL。它甚至不会达到任何 mod_proxy 或 mod_rewrite 规则。

根据您的环境,有多种方法可以在不更改太多代码的情况下解决此问题,包括:

  • “AllowEncodedSlashes”指令
  • urlencode()

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

链接关闭时的更多信息
如果您有权访问它,则可以启用 AllowEncodedSlashes 指令,这是一个非常古老的半安全修复程序,默认情况下它已被关闭。这将解决问题。如果您无法访问 Apache 配置,那么您将不得不查看其他解决方案。

于 2012-12-12T12:06:16.510 回答
0

jampark url 重定向到一个不正确的页面,使用下面的 url: http: //www.leakon.com/archives/865

于 2014-10-13T10:51:01.910 回答