T-file

一歩踏み出す勇気を全力で応援するブログ

【もう疲れたよ】Internal Server Errorを解決する方法を解説

こんにちは、webエンジニアのtakaです。

xserverで契約していたサイトが急にエラーで閲覧できなくなりました。
今回は障害対応ということで、不慣れな.htaccess周りのエラーを解決を備忘録として残していきたいと思います。

状況確認

事の発端

企業のコーポレートサイトをLaravelで作り、xserverにアップしていました。
3~4ヶ月ほどは問題なくアクセスすることができていたのですが、急にアクセスができなくなったと連絡が入り、調査を行うことになりました。

URLをブラウザで確認すると以下のエラー画面に
Internal Server Error

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%同じ操作をしても直るとは限りませんが、自分の環境に合わせて修正し、解決に繋がればと思います。