[Mojolicious]CGIで動作させるときに、URLからindex.cgiを外す方法
Perlのフレームワークは、Mojoliciousを使っています。
PSGI/Plackで動作させるのがメインのようだけど、ちゃんとCGIでも動作する優れものです。
PSGI/Plackやmod_perlで動作させている際に、引数や戻り値をリファレンス渡しをしていると、ちゃんと気をつけているつもりでもガベージコレクションのカウントが消えないでメモリリークしていることもままあるんですよね。なので、CGIで動作させて、1回ごとにプロセスが終わってくれた方が助かる場合もあります。
今時のサーバ、そんなに遅くないし。起動しちゃえば素の動作は他のLL言語より早いですし。
で、1ページものなら別に構わないのですが、複数ページのあるサイトまたはWebアプリを制作するとき、URLにindex.cgiが含まれるのがなんとなくかっこよくありません。
そのまま作っていると、
https://saruzie.com/index.cgi/page/
というような感じになります。
「CGIって昔のヤツでしょ?」という謎の言い分(まぁ、わからなくはないのですが…)が発生して、むーってなります。
なので、これを
https://saruzie.com/page/
で動作するようにします。
まず、index.cgiに下記の記述を加えます。
場所は[Mojolicious::Commands->start_app()]の前で大丈夫。
#!/usr/bin/env perl use strict; use warnings; use Mojolicious::Commands; $ENV{SCRIPT_NAME} = '/'; #これを追加 # Start command line interface for application Mojolicious::Commands->start_app('AppName');
これだけ。
6行目のを足すだけです。簡単。
ちなみに、htaccessには下記を加えておきます。
これは上の記述を加えなくても入れておいた方が良いです。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.cgi/$1 [L] </IfModule>
これで、実際にディレクトリ・ファイルがあるものを除き、全てのアクセスをindex.cgiで受けられるようになります。
Wordpressから自動生成されるhtaccessのmod rewriteと同じ意味です。