4

在试图让我的本地 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找到。

任何帮助将不胜感激。

谢谢。

4

2 回答 2

3

MediaWiki 在 IIS 7 上对冒号进行转义是针对IIS 7.5 中的一个错误的特意解决方法,该错误会导致包含未转义冒号和非 ASCII 字符组合的 URL 在某些情况下被破坏。

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

于 2013-01-06T06:21:36.770 回答
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 片段放入其中。

$('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>
于 2013-01-06T04:47:27.387 回答