こんにちは、webエンジニアのtakaです。
xserverで契約していたサイトが急にエラーで閲覧できなくなりました。
今回は障害対応ということで、不慣れな.htaccess周りのエラーを解決を備忘録として残していきたいと思います。
目次
状況確認
事の発端
企業のコーポレートサイトをLaravelで作り、xserverにアップしていました。
3~4ヶ月ほどは問題なくアクセスすることができていたのですが、急にアクセスができなくなったと連絡が入り、調査を行うことになりました。
URLをブラウザで確認すると以下のエラー画面に
500番台のエラーは原因を確認することがなかなか難しいです。
xserverのエラーを確認
まずxserverのエラーを確認します。
xserverのエラーの確認方法はこちら
エラー内容
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.
リダイレクトがうまくいかないためリダイレクトをし、そのリダイレクト先でもうまくいかずという無限ループをしている場合、このようなエラーメッセージが出ることがあります。
Laravelのエラーを確認
Laravelのログファイルは、storageフォルダ下にあります。
Laravelのログでは以下の記載がありました。
[Tue Oct 26 03:41:46.255775 2021] [core:error] [pid 11111:tid 123456789000000]
[client 123.456.789.123:00000] 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.
解決するために行ったこと
index.htmlをindex.phpに変更
xserver内の /home/hogehoge/hogehoge.com/public_html 配下にindex.htmlがあります。
htmlファイルなのですが、ファイルの中ではPHPを利用しています。
原因はわからなかったがhtmlファイルでPHPができなくなっていたようなので、phpの拡張子に変更しました。
コマンド
$ cd /home/hogehoge/hogehoge.com/public_html
$ mv index.html index.php
Laravelのpublic下の.htaccessの修正
Laravelのpublicフォルダの中にある.htaccessの記載がデフォルトから変更されていたので、もとに戻しました。
しかし、誰が触ったんだ?
tips!
.htaccessは必ずバックアップをとってから修正を行おう!取り返しがつかなくなってしまいます。
修正前
<FilesMatch ".(py|exe|php)$">
Order allow,deny
Allow from all
</FilesMatch>
修正後(デフォルト)
<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] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> AuthUserFile "/home/hogehoge/hogehoge.xsrv.jp/htpasswd/hogehoge/public/.htpasswd" AuthName "Member Site" AuthType BASIC require valid-user
public_html配下のpublic下の.htaccessの修正
xserverのpublic_html下にある.htaccessを修正しました。
修正前
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI ".*" Ngx_Cache_AllCacheMode <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ hogehoge/$1 [QSA,L] </IfModule> Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.hogehoge\.com$ RewriteRule ^(.*)$ https://fuel-hash.com/$1 [R=301,L]
修正後
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI ".*" Ngx_Cache_AllCacheMode <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.hogehoge\.com$ RewriteRule ^(.*)$ https://hogehoge.com/$1 [R=301,L] RewriteBase / RewriteRule ^$ hogehoge/public [L] RewriteRule ^(.+)$ hogehoge/public/$1 [L] </IfModule> Options +FollowSymLinks
今までどうやって動いていたんだ?
hogehogeについてはこちら
まとめ
今回は500台のエラーの修正方法について記載しました。
それぞれの環境によって原因が違うので、この記事で行ったことを100%同じ操作をしても直るとは限りませんが、自分の環境に合わせて修正し、解決に繋がればと思います。