2024/07/30(火) [n年前の日記]
#2 [linux][apache] テキストファイルがCGIとして扱われてしまって悩んだ
Webサーバ Apache2で公開しているディレクトリ内に、hoge.pl.txt や hoge.cgi.txt を置くと、何故か CGI として扱われてしまうようで、実行しようとしてエラーになることに気づいた。環境は Debian Linux 10 buster i686 + Apache2 2.4.59-1~deb10u1。
ファイル名の最後が .txt なのだからテキストファイル(text/plain)として扱われるはずでは…? もしかして、ファイル名に .pl や .cgi が含まれているだけで、CGI実行ファイルとして扱ってしまう…?
とりあえず、.htaccess に以下のような記述をして、テキストファイルとして扱われるようにしてみた。
余談。ググってみても、CGIとして動いてくれない状態を動くようにするための指定/記述ばかりで、その逆が全然見つからない…。Microsoft Copilot に何度も尋ねまくって色々試してみたけれど、どうやら RemoveHandler .pl .cgi が効いてくれたっぽい。
ファイル名の最後が .txt なのだからテキストファイル(text/plain)として扱われるはずでは…? もしかして、ファイル名に .pl や .cgi が含まれているだけで、CGI実行ファイルとして扱ってしまう…?
とりあえず、.htaccess に以下のような記述をして、テキストファイルとして扱われるようにしてみた。
Options +Indexes -ExecCGI +FollowSymLinks AddType text/plain .pl.txt AddType text/plain .cgi.txt <FilesMatch "\.(pl|cgi|txt)$"> ForceType text/plain SetHandler none </FilesMatch> <Files ~ "\.(pl|cgi)\.txt$"> ForceType text/plain SetHandler none RemoveHandler .pl .cgi RemoveHandler cgi-script </Files>
- Options -ExecCGI で、CGIを無効化
- FilesMatch や Files で、特定の拡張子のファイルに対して設定を変更する。
- ForceType text/plain で、強制的にテキストファイルとして扱う。
- RemoveHandler .pl .cgi で、.pl や .cgi をCGIファイルとして扱わないことにする。
余談。ググってみても、CGIとして動いてくれない状態を動くようにするための指定/記述ばかりで、その逆が全然見つからない…。Microsoft Copilot に何度も尋ねまくって色々試してみたけれど、どうやら RemoveHandler .pl .cgi が効いてくれたっぽい。
[ ツッコむ ]
以上です。