在ErrorDocument消息中设置charset

 mobiledu2502879767 发布于 2023-02-13 19:47

我有一个.htaccess看起来像这样的文件:

AddDefaultCharset utf-8
AddCharset utf-8 .html
Order Allow,Deny 
ErrorDocument 403 "Error 403 - Esta ubicación no es pública"

文件本身编码为UTF-8.但是,Apache坚持声明ISO-8859-1并且错误消息被破坏:

HTTP/1.1 403 Forbidden
Date: Fri, 29 Nov 2013 10:06:25 GMT
Server: Apache/2.4.6 (Win32) OpenSSL/1.0.1e PHP/5.5.6
Content-Length: 42
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

如果我在浏览器中手动将编码更改为UTF-8文本看起来是正确的.

网站已被授予所有权限:


    ServerName tmp
    DocumentRoot "D:/tmp"

    
        AllowOverride All
        Require all granted
    

......并且Apache日志中没有任何相关内容.

我错过了什么?

1 个回答
  • 太棒了!我必须说.我不得不挖掘所有资源并阅读大量手册以找出这种行为的原因.

    它似乎是一种已知的行为,但在官方手册中却没有很好地涵盖.最后,我在其中找到了一个参考this Apache manual:

    抑制-错误的字符集

    适用于2.0.54之后的版本

    当Apache发出重定向以响应客户端请求时,响应包括一些实际文本,以防客户端无法(或不自动)遵循重定向.Apache通常根据它使用的字符集标记此文本,即ISO-8859-1.

    但是,如果重定向是使用不同字符集的页面,则某些损坏的浏览器版本将尝试使用重定向文本中的字符集而不是实际页面.例如,这会导致希腊语被错误地渲染.

    设置此环境变量会导致Apache省略重定向文本的字符集,然后这些损坏的浏览器将正确使用目标页面的字符集.

    而这正是您所看到的行为charset=iso-8859-1标题中的行为.


    怎么修:

    你的.htaccess代码是这样的:

    # set desired env variable to suppress iso-8859-1 charset
    SetEnvIf Host ^ suppress-error-charset
    
    # set desired 403 message with desired charset 
    ErrorDocument 403 "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'></head><body>Error 403 - Esta ubicación no es pública</body></html>"
    

    请注意,这SetEnvIf Host ^是一个始终适用的条件,因此suppress-error-charset将始终设置.我已经测试了我的2行,.htaccess并在浏览器中显示正确的错误消息.

    2023-02-13 19:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有