可选背景(避免 XY 问题):我正在开发一个静态网站,其中包含类似 的 URL
www.example.com/książka/
。这些 URL 的问题在于,当您共享它们/粘贴到 IM 程序等时,变音字符会扩展为%<hex>
并变得不可读:www.example.com/ksi%C4%85%C5%BCka/
。因此,我正在考虑以下内容:
- 将页面的规范 URL 设置为
www.example.com/ksiazka/
(“ąż”替换为“az”)- 返回临时重定向(HTTP 302 或 307)到
www.example.com/książka/
。不起作用的:
自动地址重写。原因:我们不是从“ąż”转到“az”,而是从“az”转到“ąż”或者可能是“ąz”或“aż”或“áz”,或者许多其他可能性之一。重定向必须在页面生成期间生成,此时我们知道现有页面的完整列表,因此我们知道“ksiazka”应该重定向到“książka”而不是“książką”。
我需要为每个页面配置 1 个 HTTP 重定向。每次上传新文章时,我都需要一个新的 HTTP 重定向。
编辑 NGINX 配置需要 root 访问权限,而我正在以普通用户的权限部署网站。在 Apache 下,您可以在 中添加一些指令.htaccess
,但这会对性能造成影响,并且不适用于 NGINX。
除此之外,我可以创建一个包含文件/etc/nginx/sites-available/mysite
来提取内容/home/myuser/mysite/_redirects
。这样服务器就会读取由普通用户控制的文件。缺点是,它会让普通用户访问所有 NGINX 配置选项,而我只需要设置重定向。
为了解决这个问题,我也许可以编写一个自动化程序,读取用户上传的文件,其中只包含重定向所需的信息。类似于_redirects
Netlify 中的文件。但这感觉……不对劲。太定制了。
回顾一下:
- 静态站点
- 需要 HTTP 302 或 HTTP 307
/etc/nginx
频繁更新(无法手动编辑)- 以非特权系统用户身份上传的文件
- 不要给予该用户过多的 Web 服务器控制权
在 NGINX 上执行此操作的好方法是什么?