服务器配置
配置 Hugo 开发服务器的请求头与重定向规则。
这些设置只作用于 Hugo 的开发服务器,因此推荐为开发环境单独建立一个配置目录,把服务器配置放在其中:
project/
└── config/
├── _default/
│ └── hugo.toml
└── development/
└── server.toml配置目录的用法见 /configuration/。
默认设置
对于请求了并不存在的 URL,开发服务器默认重定向到 /404.html,详见下文的 404 错误一节。
重定向键
| 键名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
force |
bool |
false |
即使该路径下已存在内容,也强制重定向。 |
from |
string |
无 | 匹配请求 URL 的 glob 模式。from 与 fromRE 必须至少设置一个;若两者都设置,URL 必须同时匹配两者。 |
fromHeaders |
map[string][string] |
无 | 重定向需要匹配的请求头,把 HTTP 头名称映射到待匹配取值的 glob 模式。该映射为空时重定向总是触发。0.144.0 版本新增。 |
fromRe |
string |
无 | 匹配请求 URL 的正则表达式。from 与 fromRE 必须至少设置一个;若两者都设置,URL 必须同时匹配两者。正则的捕获组可在 to 字段中以 $1、$2 等引用。0.144.0 版本新增。 |
status |
string |
无 | 重定向使用的 HTTP 状态码。状态码为 200 时会触发 URL 重写。 |
to |
string |
无 | 把请求转发到的目标 URL。 |
响应头
在每个服务器响应中都加入响应头,便于测试,尤其是内容安全策略(CSP)这类功能:
[[headers]]
for = '/**'
[headers.values]
X-Frame-Options = 'DENY'
X-XSS-Protection = '1; mode=block'
X-Content-Type-Options = 'nosniff'
Referrer-Policy = 'strict-origin-when-cross-origin'
Content-Security-Policy = 'script-src localhost:1313'for 用于匹配请求路径,headers.values 下的键值对会原样写入响应头。
重定向
可以定义简单的重定向规则:
[[redirects]]
from = '/myspa/**'
to = '/myspa/'
status = 200
force = false示例中的 200 状态码会触发 URL 重写,这通常是单页应用(SPA)想要的行为。
404 错误
开发服务器默认把任何指向不存在 URL 的请求重定向到 /404.html。
如果已经定义了其他重定向,就必须显式补上这条 404 重定向:
[[redirects]]
force = false
from = '/**'
to = '/404.html'
status = 404多语言项目要确保默认语言的 404 重定向定义在最后:
defaultContentLanguage = 'en'
defaultContentLanguageInSubdir = false
[[redirects]]
from = '/fr/**'
to = '/fr/404.html'
status = 404
[[redirects]] # 默认语言必须放在最后。
from = '/**'
to = '/404.html'
status = 404当默认语言放在子目录中提供服务时:
defaultContentLanguage = 'en'
defaultContentLanguageInSubdir = true
[[redirects]]
from = '/fr/**'
to = '/fr/404.html'
status = 404
[[redirects]] # 默认语言必须放在最后。
from = '/**'
to = '/en/404.html'
status = 404完整示例
只保留开发环境需要的内容,可把开发服务器配置单独放在 config/development/server.toml:
[[headers]]
for = '/**'
[headers.values]
X-Content-Type-Options = 'nosniff'
[[redirects]]
from = '/myspa/**'
to = '/myspa/'
status = 200
force = false
[[redirects]]
force = false
from = '/**'
to = '/404.html'
status = 404