
Я запускаю веб-сервер 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, чтобы знать, как это сделать самому. Любая помощь будет принята с благодарностью.