使用Unicode的URL - ISAPI_Rewrite无法识别它

时间:2011-07-20 12:13:56

标签: unicode utf-8 url-rewriting iis-6 isapi-rewrite

我使用ISAPI_Rewrite v2重写url很长一段时间。该网站使用希伯来语,因此网页的网址是。 ISAPI_Rewrite v2不支持希伯来字符,但我通过使用UTF-8(Hex)代码来解决希伯来字符。 这是一个例子:

RewriteRule ^/\%D7\%A6\%D7\%95\%D7\%A8_\%D7\%A7\%D7\%A9\%D7\%A8/$ /Contact.aspx [L,I]
RewriteRule ^/\%D7\%A6\%D7\%95\%D7\%A8_\%D7\%A7\%D7\%A9\%D7\%A8$ /Contact.aspx [L,I]

问题: 在statcounter中检查我的热门页面时,我遇到了这个网址:

http://mysite.com/%u05F6%u05E5%u05F8_%u05F7%u05F9%u05F8

与我的示例中的URL规则相同,但是在Unicode中!显然ISAPI_Rewrite v2没有处理这个URL,而且用户得到“无法找到页面”。

还有一些页面更复杂,例如将URL的一部分作为查询参数发送..也在Unicode中。

我虽然只针对一个解决方案 - 制定相同的规则,这次使用Unicode并在后面的代码中处理Unicode。但解决方案存在两个问题:

  1. URL以Unicode显示用户,而不是希伯来语。
  2. 代码中的更多代码,我认为不需要代码。我的意思是这个场景可以/需要在它到达代码之前处理..
  3. 有什么想法吗?

    感谢。

    修改 也许这种重定向可以通过IIS6以某种方式完成?当IIS识别Unicode URL时,它会将其转换为UTF-8并重定向页面。

2 个答案:

答案 0 :(得分:3)

  

ISAPI_Rewrite v2不支持希伯来语字符,但我使用UTF-8克服了这个问题

IIS通常要求您在URL中使用UTF-8。当URL不是有效的UTF-8序列时,使用默认的特定于语言环境('ANSI')编码会有回退,但如果服务器的语言环境不是希伯来语(代码页1255),那么(a)没有用处,和(b)仍然不完全可靠,因为一些cp1255字符串也可以是有效的UTF-8序列。所以,是的,因为可靠性总是使用UTF-8表格。

http://mysite.com/%u05F6%u05E5%u05F8_%u05F7%u05F9%u05F8
  

与我的示例中的URL规则相同,但是使用Unicode!

不是真的。 %uxxxx语法来自JavaScript escape()函数,并且特定于该函数的自定义编码形式。它与标准URL编码无关。以上内容甚至不是有效的URL,也不会被某些浏览器接受。

您需要找到该链接的来源并修复它以使用正确的UTF-8-%xx编码。

与此同时,您可以使用404处理程序执行某些操作,而不是重定向到规范格式。

答案 1 :(得分:0)

如果在IIS后面使用某些FastCGI扩展,则可以尝试配置以将FastCGI配置为对特定服务器变量集使用UTF-8编码,使用REG_MULTI_SZ注册表项FastCGIUtf8ServerVariables并将其值设置为服务器变量名称列表。

reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\Parameters /v FastCGIUtf8ServerVariables /t REG_MULTI_SZ /d REQUEST_URI\0PATH_INFO

https://www.iis.net/learn/application-frameworks/install-and-configure-php-on-iis/configuring-the-fastcgi-extension-for-iis-60#utf8servervars