httpd на OpenBSD: как перенаправить URL-адреса, заканчивающиеся на «.php»?

httpd на OpenBSD: как перенаправить URL-адреса, заканчивающиеся на «.php»?

Я запускаю веб-сервер httpd(8) на OpenBSD. Для обслуживания php используется php-8.1.9. В /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, чтобы знать, как это сделать самому. Любая помощь будет принята с благодарностью.

Связанный контент