[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と同じ意味です。

© 2018- Saruzie.