前言

之前得到友链大佬 网联基地 关于 域名备案期间处理方案中针对搜索引擎做单独解析 的启发,写了个 自动同步网站的批处理 把小站在小水管机上放了一份,是个 Windows Server,所以自然而然用的 IIS 作为网站服务端程序。IIS虽然是微软的亲儿子,但习惯了 nginx、caddy等网站程序来说,IIS 真的有点不适应,有些设计甚至有点反人类。

好在只是个给搜索引擎喂料的应用, IIS10 装完做了只基本的设置就投入上线使用了,使用中发现输出的日志如果有中文出现了乱码,网络上有关这个问题的解决方案几乎没有,或者没有一篇说到点子上。

IIS10 输出 W3C 格式日志中文乱码

因为网页源码已经指定了 <meta charset="utf-8">,所以浏览器访问中文内容或者中文路径是没问题的,但输出的日志显示中文路径出现了乱码:

1
2024-05-12 08:45:56 GET /tags/淇勭綏鏂疺PS/ - 443 101.43.47.44 Googlebot - 200 21192 168 64

虽然这乱码貌似也没什么影响,但总归不知道这乱码具体内容是什么,搜索引擎爬取的是什么也不知道,也不知道正确与否。

乱码也分原始输出乱码和编辑器编码错误,如 notepad2F8 尝试 UTF-8 等重新编码确认是不是原始乱码问题。如果是编辑器解码错乱那换编辑器或指定正确编码就可以了

解决日志中文乱码

这个乱码问题不是出在网页,而是 IIS10 的日志输出,所以需要额外处理。

首先打开IIS》定位到自己服务器》双击 日志,日志文件编码选择 UTF-8,然后从右侧:操作》管理服务器》重新启动(不是重启服务器),如果不能解决问题接着往下看。

网上教程没有人提及过日志输出 W3C 格式时乱码的问题,自然也没有解决方案。倒是有些提及网站乱码的解决方案:全局设置解码方式

在既有的教程中,多半是有个 iis站点主页 .NET 全球化 的设置入口,但站长Windows Server 2022 上的 IIS10 版本没有安装 .net 组件,自然就没有这个入口,我们采用直接修改网站配置文件的方式来达到目的:

1
2
3
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
</system.web>

将以上配置代码添加到网站配置:web.cofig,保存后重启网站,再查看 IIS 日志中有关中文的部分发现正常了:

1
2024-05-12 09:35:38 GET /tags/美国VPS/ - 443 101.43.47.44 Googlebot - 200 19447 159 62

IIS10网站配置样本:web.cofig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
</system.web>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="index.html" />
</files>
</defaultDocument>
<staticContent>
<mimeMap fileExtension=".webp" mimeType="image/webp" />
</staticContent>
</system.webServer>
</configuration>

参考链接

  1. 域名备案不让解析怎么办?备案怎么不影响搜索引擎收录?备案期间的3种处理方案
  2. iis 站点中文乱码 解决方案