我希望 eghttps://example.com/to/redirect
由 nginx 重定向到https://example.com/some/url/with/#my-beautiful-id
。然而,在 nginx 配置文件中#
用于注释
有可能吗?我应该在 nginx 配置中写入什么才能使其正常工作?
不起作用
server {
...
location /to/redirect {
...
return https://example.com/some/url/with/%23my-beautiful-id;
}
}
答案1
该#
字符不被视为注释的开头,而是某些字符串的一部分,例如https://example.com/some/url/with/#my-beautiful-id
。然而它是处理为注释开头,前面加上空格、{
或}
字符;
(不确定这是否是完整列表)。为了防止以这种方式处理,您需要将字符串括起来:
set $test 123#456; # $test variable value is '123#456'
set $test 123;#456; # $test variable value is '123', #456 treated as the comment
set $test "123;#456"; # $test variable value is '123;#456'
set $test '123;#456'; # $test variable value is '123;#456'
通常不需要在 nginx 配置中引用字符串(除非它包含空格或其他特殊字符{
,如}
等),但你总是可以自由地这样做,这意味着行
return https://example.com/some/url/with/#my-beautiful-id;
和
return "https://example.com/some/url/with/#my-beautiful-id";
完全相等。