4

我为 Apache 上的基本身份验证添加了用户名和密码,并且我希望为我的用户提供 Unicode AuthName 字符串。我的 httpd.conf 看起来像这样:

<Location "/">
    AuthType Basic
    AuthName "Some Unicode Here"
    AuthUserFile /somewhere/htpasswd
    Require valid-user
</Location>

但是“ Some Unicode Here”在我的浏览器中似乎总是垃圾。如何让它正确显示?

4

2 回答 2

4

您可能无法使其工作,主要问题是缺乏浏览器支持,请参阅我应该为 HTTP 标头使用哪种字符编码?. 显示AuthNameWWW-Authenticate标题中的领域:

WWW-Authenticate: Basic realm="Some Unicode Here"

一些快速的实验表明:

  • Apache 不在AuthName配置中编码 UTF-8 字符串,它按原样发送
  • Firefox、MSIE 和 Chrome 都(正确地)将该 UTF-8 字节序列解释为 ISO-8859-1(因此可能会错误地显示它)
  • 无支持 HTTP RFC-2616 所述的 RFC-2047 MIME 编码,其字面意思显示为=?utf-8?B?U29tZSBVbmljb2RlIEhlcmUK?=

(如果您可以选择,我建议mod_auth_tkt作为基于 cookie 的基本身份验证的替代品,它有一个插入式 htpasswd 样式的 perl 脚本,并且设置REMOTE_USER,您只需要滚动自己的表单。)

于 2013-01-24T16:54:41.680 回答
3

我找到了包含重音字符的 .htaccess AuthName 的正确解决方案:

使用文本编辑器或“iconv”以正确的编码保存文件。

在 Sublime 3 中,我使用了 File -> Save with Encoding -> Western ISO-8859-1

于 2015-10-02T14:37:45.597 回答