PHP
Slim3

PHP Slim3フレームワークで500番エラー(リダイレクトループ)が起きたとき

プルリクエストを送ったが、ここでも同じ理由でさまよっている人向けに備忘録として残しておく
(…Qiitaに備忘録って正直どうなんだろう)
https://github.com/slimphp/Slim-Website/pull/323

何が起きたか

Slim3を使ってWebアプリを作っていたのだが、ある程度作って来たタイミングでさくらレンタルサーバーにアップロードをしてみた。

すると、500番エラーが表示されてindex.php以外が全く見れない(slim3の処理範囲外のページは見れた)

てことで、ログを見る
※さくらレンタルサーバーの場合はサーバーコントロールパネルのアクセスログの設定メニューからエラーログが見れます

[Fri Nov 09 13:17:39.191931 2018] [core:error] [pid 61852] [client 000.000.000.000:0] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: ○○○○○○
[Fri Nov 09 13:17:39.271332 2018] [core:error] [pid 61853] [client 000.000.000.000:0] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: ○○○○○○

リダイレクトループ…?.htaccessの仕業だなとなんとなく予想を付けた

修正内容

.htaccessを以下のように修正した

公式ドキュメント.htaccessはこう

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

これに1行追加

RewriteEngine On
# 以下1行を追加
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

リダイレクトのベースディレクトリを指定して無事表示されるようになりました、やったぜ。

後書き

このWebアプリはいろんな環境(DockerとかXAMPPとかラズパイとか)で開発してて問題なく動いてるからレンタルサーバーでも動くっしょっと勘ぐってたら動かなくて焦った。

さて、この記事が誰かの役に立つ日は来るのだろうか……