Url rewriting 在IIS 7.5上的Mediawiki URL中显示冒号

Url rewriting 在IIS 7.5上的Mediawiki URL中显示冒号,url-rewriting,hyperlink,iis-7.5,mediawiki,urlencode,Url Rewriting,Hyperlink,Iis 7.5,Mediawiki,Urlencode,在试图让我的本地IIS服务器不在MediaWiki链接中对冒号进行编码后(转向http://localhost/wiki/Category:People进入http://localhost/wiki/Category$30人)我开始认为这样的壮举是不可能的。特别令人感兴趣的是,两个链接在输入时都起作用,只是整个wiki中的所有链接都显示为编码版本。由于这两种方法都有效,这纯粹是视觉上的烦恼,但如果可能的话,我想解决这个问题 作为替代方案,我想知道是否有可能仅仅改变链接的显示。如果MediaWik

在试图让我的本地IIS服务器不在MediaWiki链接中对冒号进行编码后(转向
http://localhost/wiki/Category:People
进入
http://localhost/wiki/Category$30人
)我开始认为这样的壮举是不可能的。特别令人感兴趣的是,两个链接在输入时都起作用,只是整个wiki中的所有链接都显示为编码版本。由于这两种方法都有效,这纯粹是视觉上的烦恼,但如果可能的话,我想解决这个问题

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

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

我最初在6月份在MediaWiki用户论坛上发布了这个问题,但在解决这个问题方面没有得到任何帮助。该线程可在上找到

任何帮助都将不胜感激


谢谢。

编辑:我的原始答案仍在下面,但我的“假设”是错的。Ilmari的回答中描述了这个问题。这是因为IIS 7.0/7.5在将带有冒号的URL分类为格式错误/黑客攻击尝试时存在一个微软确认的错误(事实并非如此)。他建议升级到IIS8.0(WindowsServer2012)来解决这个问题,尽管这个问题还没有得到证实

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

原始答案如下

--

据我所见,它是在Windows上运行的PHP5.4,与相同的设置和配置文件一样,我的RedHat机器没有做到这一点,而IIS做到了这一点。FastCGI可能也是一种解决方法

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

因此,我现在就把这个jquery片段放进去了

$('a').each( function() {
  this.href = this.href.replace(/%3A/g, ":");
});
当我开始使用sitemap(这是一个新安装)时,我会确保它们也被解析出来

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

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

IIS 7上MediaWiki对冒号的转义是一个for,它会导致包含未转义冒号和非ASCII字符组合的URL在某些情况下损坏


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

+1谢谢!我正准备搬到W2K12来安装我的虚拟机,看到它是MW内置的一个解决方案,我会尽快搬家。很高兴能为您提供帮助。为了谨慎起见,我应该注意到,我并不确定这个bug是否已经在IIS8中修复,但我当然希望如此。至少,MediaWiki中的解决方法只适用于IIS 7,因此,如果任何其他版本的IIS需要它,那么这也是MediaWiki中的一个错误。一旦我有机会了解这是否仍然是IIS 8.0中的一个问题(无论最初的IIS错误是否仍然存在),我将选择答案,但感谢您阐明这一点。我环顾四周,找不到任何迹象表明这是故意的。最后,我开始用IIS 8.5更新我的机器,以赢得8.1,MediaWiki不再有这个问题。我肯定也走了这条路,让冒号被接受并创建重写规则,但我始终无法让它正常工作。知道MediaWiki故意这么做有点烦人,因为看起来真正的问题是他们的“修复”不够严格,并且捕捉到了不会触发错误的情况。