Webエンジニアの日常とリーグオブレジェンド

Webエンジニアとして働いている猫のブログ。EmacsとMySQLとリーグオブレジェンド(LoL)が好物。主に技術的な記事かLoLの記事を書く。

無料の Open LiteSpeed で .htaccess を使う

f:id:yoshiki_utakata:20190622101834p:plain

Laravel/LumenをLiteSpeedで動かす

Laravel (や Lumen )を LiteSpeed 上で動かしたい。Laravel を動かすためには、 .htaccess を有効にする必要がある。

Laravel のディレクトリにある public/.htaccess は Laravel 用の Apache 設定ファイルで、Apache がこの .htaccess を読み込むことで Laravel は Apache 上で正常に動作するようになる。

無料の Open LiteSpeed で .htaccess を読めるのか

LiteSpeed は Apache の設定ファイルをそのまま流用できるのがウリだが、 .htaccess を読み込むには有料版の LiteSpeed を利用する必要がある。

下記のような記事があり、無料版の Open LiteSpeed でも .htaccess を読み込めそうだが、僕の場合この記事通りにせっていしても動かなかった。これが、LiteSpeed バージョンなどによる違いなのか、それとも単に僕の設定が間違っているのかはわからなかった。

www.logw.jp

どうしたのか

こう設定したら動いた。

rewrite {
  enable 1
  rules <<<END_OF_HTACCESS
RewriteEngine On

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
  END_OF_HTACCESS
}

rewrite enable 1

rewriteモジュールを有効ニスルタメニ、 rewrite の中に enable 1 を書く。

rulesの中身

rules の中身がRewriteの設定だ。

RewriteEngine On

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

これは、Laravel などに入っている以下の設定のうち、mod_rewriteの中身の部分だけ持ってきたものだ。多分全体を持ってきても動くと思うが、negotiationの部分とかは多分いらないだろうから。必要最低限の部分だけ持ってきた。*1

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

設定が適用されているか確認する

http://localhost:7080 にアクセスし、

  • 左のメニューから「Virtual Hosts」
  • バーチャルホスト名をクリック
  • 「Rewrite」のタブを選択

すると今の設定が見られる。

Virtual Host の Rewrite の設定
Virtual Host の Rewrite の設定

ここに設定が入っていなかったら、confの文法がおかしいなど、なにか問題が起こっている場合が多い。

まとめ

結局 .htaccess を読み込む方法はわからなかったが、.htaccess の中身を LiteSpeed の conf にコピペしたら動いた。

PHPフレームワークLaravel入門 第2版

PHPフレームワークLaravel入門 第2版

  • 作者:掌田津耶乃
  • 出版社/メーカー: 秀和システム
  • 発売日: 2019/12/27
  • メディア: 単行本

*1:動かなかった場合の特定を簡単にするため、まずはシンプルな設定で試すのは上等手段だ。