【问题标题】:Displaying colons in Mediawiki URLs on IIS 7.5在 IIS 7.5 上的 Mediawiki URL 中显示冒号
【发布时间】:2012-10-11 21:05:30
【问题描述】:

在试图让我的本地 IIS 服务器不编码 MediaWiki 链接中的冒号(将 http://localhost/wiki/Category:People 变成 http://localhost/wiki/Category$3APeople)之后,我开始认为这样的壮举是不可能的。特别有趣的是,两个链接在输入时都有效,只是整个 wiki 中的所有链接都显示为编码版本。由于两者都有效,这纯粹是一种视觉上的烦恼,但如果可能的话,我想解决一个。

作为替代方案,我想知道是否可以仅更改链接的显示。如果 MediaWiki/IIS 如此坚持在 URL 中编码冒号,那很好,但是无论实际链接是什么,是否可以向用户显示冒号?

我知道 Windows 服务器上的 url 中不允许使用冒号,因为它们会打开对数据文件流的访问,但由于这是在我的本地计算机上运行的私有 wiki,如果可能,我不会反对禁用此安全预防措施.

我最初在 6 月份在 MediaWiki 用户论坛上发布了这个问题,但在解决问题方面没有得到任何帮助。可以在http://www.mwusers.com/forums/showthread.php?18722-IIS-7.5-Percent-encoding-all-colons-in-URLs 找到该线程。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: url-rewriting hyperlink iis-7.5 mediawiki urlencode


    【解决方案1】:

    MediaWiki 在 IIS 7 上对冒号的转义是 deliberate workarounda bug in IIS 7.5 的转义,这会导致包含未转义冒号和非 ASCII 字符组合的 URL 在某些情况下被破坏。

    eduncan911 描述的客户端 jQuery 解决方法应该没问题,但正确的解决方案(据我所知,鉴于该错误似乎从未在 IIS 7.5 中修复过)可能是升级到 Windows Server 2012 和 IIS 8.0(或其他不存在该错误的 HTTP 服务器)。

    【讨论】:

    • +1 谢谢!我正要为我的 VM 迁移到 W2K12,看到它是 MW 内置的解决方法,我迟早会做出迁移。
    • 很高兴能提供帮助。为了谨慎起见,我应该注意我实际上并不知道确定该错误已在 IIS 8 中得到修复,但我当然希望如此。至少,MediaWiki 中的解决方法仅适用于 IIS 7,因此如果任何其他版本的 IIS 需要它,那么这也是 MediaWiki 中的一个错误。
    • 一旦我有机会看看这是否仍然是 IIS 8.0 中的问题(无论原始 IIS 错误是否仍然存在),我会选择答案,但感谢您阐明这。我环顾四周,找不到任何暗示这是故意的。
    • 终于用 IIS 8.5 将我的机器更新到 Win 8.1,MediaWiki 不再有这个问题。
    【解决方案2】:

    编辑:我原来的答案还在下面,但我在“假设”方面错了。 Ilmari 的回答中描述了这个问题。这是因为 IIS 7.0/7.5 在将带有冒号的 url 分类为格式错误/黑客尝试时存在 Microsoft 确认的错误(事实并非如此)。他建议升级到 IIS 8.0 (Windows Server 2012) 来解决这个问题,尽管这尚未得到证实。

    我正在将我的机器转移到 Windows Server 2012,一旦我确认它可以正常工作,我会回来更新这个答案。

    原始答案如下。

    --

    据我所知,它是在 Windows 上运行的 PHP 5.4,具有相同的设置和配置文件,我的 RedHat 机器没有这样做,而 IIS 可以。 FastCGI 也可能是一种解决方法。

    我最初试图创建一个出站规则,但为了绕过 MediaWiki 的特殊 url 要求,我不得不创建很多条件。

    因此,我只是暂时将这个 jquery sn-p 放入。

    $('a').each( function() {
      this.href = this.href.replace(/%3A/g, ":");
    });
    

    当我使用站点地图(这是一个新安装)时,我会确保它们也被解析出来。

    还请注意,我在使用冒号时也遇到了一些安全违规错误,因为 .NET ass-u-mes 认为冒号是一个坏字符。要解决这个问题,请将其添加到在该目录中运行的 web.config 文件中:

    <system.web>
        <httpRuntime requestValidationMode="2.0" 
            requestPathInvalidCharacters="&lt;,>,*,%,&amp;,\" />
    </system.web>
    

    【讨论】:

    • 我当然也走这条路,接受冒号并创建重写规则,但我永远无法让它正常工作。知道 MediaWiki 是故意这样做的有点烦人,因为看起来真正的问题是他们的“修复”不够严格,并且也捕获了不会触发错误的情况。
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2012-08-07
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多