我在 OpenBSD 上运行 httpd(8) Web 服务器。php-8.1.9 用于提供 php 服务。其中/etc/httpd.conf
有以下内容(example.com
是实际域的占位符):
server "example.com" {
listen on * tls port 443
tls {
certificate "/etc/letsencrypt/live/example.com/fullchain.pem"
key "/etc/letsencrypt/live/example.com/privkey.pem"
}
root "/example.com/"
directory index index.php
location "*.php" {
fastcgi socket "/run/php-fpm.sock"
}
location "/" {
pass
}
location not found match "/(.*)$" {
request rewrite "/%1.php"
}
}
最后两个位置块是我尝试去掉 URL 的“.php”后缀,以使我的网站看起来更专业。它们部分按预期工作。也就是说,用户可以访问https://example.com/foo
和https://example.com/foo.php
。
如果我手动编写 HTML,这不会是问题,因为我可以只使用超链接将用户重定向到该https://example.com/foo
版本。
但是,有一个问题,因为我使用的是静态网站生成器,它会生成很多页面。每个页面都包含 HTML,它会将用户重定向到以“.php”结尾的其他页面。我无法轻松编辑生成器,因为它是一个编译的 C 程序。此外,将以“.php”结尾的网站重定向到更干净、无后缀的版本要容易得多。有没有办法用 httpd 做到这一点?
手册页httpd.conf
给出了使用 block 指令进行重定向的示例:
server "example.com" {
listen on 10.0.0.1 port 80
listen on 10.0.0.1 tls port 443
block return 301 "$REQUEST_SCHEME://www.example.com$REQUEST_URI"
}
但是,我对 httpd 不够熟悉,不知道该如何自己做这件事。如能得到任何帮助,我将不胜感激。