OpenBSD 上的 httpd:如何重定向以“.php”结尾的 URL?

OpenBSD 上的 httpd:如何重定向以“.php”结尾的 URL?

我在 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/foohttps://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 不够熟悉,不知道该如何自己做这件事。如能得到任何帮助,我将不胜感激。

相关内容