
私は 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"
}
}
最後の 2 つのロケーション ブロックは、サイトをよりプロフェッショナルに見せるために、URL から '.php' サフィックスを削除しようとしたものです。これらは部分的には意図したとおりに機能します。つまり、ユーザーは と の両方にアクセスできhttps://example.com/foo
ますhttps://example.com/foo.php
。
https://example.com/foo
HTML を手動で記述している場合は、ハイパーリンクを使用してユーザーをそのバージョンにリダイレクトできるため、これは問題になりません。
しかし、多くのページを生成する静的サイト ジェネレータを使用しているため、問題があります。各ページには、ユーザーを '.php' で終わる他のページにリダイレクトする HTML が含まれています。ジェネレータはコンパイルされた C プログラムであるため、簡単に編集できません。また、'.php' で終わるサイトを、よりクリーンで接尾辞のないバージョンにリダイレクトする方がはるかに簡単です。httpd でこれを行う方法はありますか?
のマニュアル ページには、httpd.conf
ブロック ディレクティブを使用したリダイレクトの例が示されています。
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 に十分精通していないため、自分でこれを行う方法がわかりません。 ご協力いただければ幸いです。