メニュー

404 Not Found

Not Found エラー(ページが見つかりませんというエラー)には、いくつかの理由があり、それぞれ、異なる原因によるものです。

404 Not Found

[!Info]
以下の具体例は、Apache webサーバーのものです。最も一般的に使われているサーバーソフトウェアです。

[!訳注]
「具体例は Apache サーバーのものです」と言った直後に、なぜいきなり IIS サーバーの話が始まるのか、謎です。

IIS で .htaccess ファイルを使う

Web Platform Installer を使って IIS サーバーに URL Rewrite を追加したあと、IIS サーバーを再起動します。IIS の管理インターフェースから URL Rewrite をダブルクリックし、Inbound Rules の下にある Import Rules をクリックし、Rules to Import の下にある Configuration ファイルを閲覧し、ルートにある .htaccess ファイルを選択し、それから Import をクリックします。IIS サーバーを再起動します。これで、Grav にアクセスできます。

.htaccess ファイルが見つからない

最初にチェックしてほしいのは、 Grav をインストールしたルートフォルダに、 .htaccess ファイルがっ提供されているかどうかです。 .htaccess ファイルは 隠し ファイルであるため、エクスプローラーや windows のファインダーからは、普通は見えません。 Grav を展開し、ファイルを 選択 し、それから 移動 もしくは コピー した場合、このとても重要なファイルが、前のフォルダに置き去りにされてしまうことがあります。

Grav を展開して、 すべてのフォルダを 移し替えることを 強く推奨します それから、フォルダ名を変更してください。これにより、すべてのファイルが適切な位置を保つことが確認できます。

AllowOverride All

Grav が提供する .htaccess が設定する rewrite ルールで、ルーティング機能が適切に機能するためには、Apache がまずそのファイルを読み込まなければいけません。<Directory><VirtualHost> ディレクティブが、AllowOverride None とともにセットアップされると、 .htaccess ファイルは完全に無視されます。最もシンプルな解決策は、 RewriteRule が使用可能なところで、この設定を AlloOverride All に変更することです。また、Options ディレクティブに、FollowSymLinks または SymLinksIfOwnerMath が必要です。同じ行の ‘Options’ の後に ‘+FollowSymlinks’ を追加するだけです。

AllowOverride の詳細と、options の設定については、 Apache ドキュメント で探せます。

RewriteBase の問題

Grav サイトのホームページは読み込まれるのに、 他のすべてのページApache-style エラーを表示する場合、最もありうる原因は、 .htaccess ファイルに関する問題です。

Grav に付属するデフォルトの .htaccess は、ほとんどの場合、すぐに使えます。 しかし、仮想ホストの場合、特定の構成により、ファイルシステムが仮想ホストの設定と直接一致していない場合があります。 これらのケースでは、 .htaccess ファイル中の RewriteBase オプションを正しい path に設定しなければいけません。

.htaccess ファイル自身に、短い説明があります:

##
# If you are getting 404 errors on subpages, you may have to uncomment the RewriteBase entry
# You should change the '/' to your appropriate subfolder. For example if you have
# your Grav install at the root of your site '/' should work, else it might be something
# along the lines of: RewriteBase /<your_sub_folder>
##

# RewriteBase /

単純に、 RewriteBase / の前の # を、コメント解除するために削除してください。それから、サーバー環境に適合するように path を調整してください。

htaccess ガイド では、 .htaccess ファイルの場所を特定したり、トラブルシューティングするのを助けるための追加情報を説明しています。

Rewrite モジュールが見つからない

いくつかの web サーバーパッケージ(わたしが見たことがあるのは、 EasyPHP と WAMP です!)では、Apache の rewrite モジュールがデフォルトで有効な状態とはなっていません。 通常、それらは Apache の設定から有効化できるか、もしくは、 httpd.conf の以下の行(もしくはこれに類似する行)をコメントアウトし、 Apache が再読込することで可能です:

#LoadModule rewrite_module modules/mod_rewrite.so

その後、 Apache サーバーを再起動してください。

.htaccess をテストするスクリプト

.htaccess の問題と rewrite の問題を切り分けるために、 htaccess_tester.php ファイルをダウンロードできます。これを Grav のルートディレクトリに置いてください。

それから、ブラウザで http://yoursite.com/htaccess_tester.php を表示してください。成功メッセージと、表示されている Grav の .htaccess ファイルのコピーが取得されます。

次に、既存の .htaccess ファイルをバックアップして、 rewrites が機能しているかテストできます:

mv .htaccess .htaccess-backup

それから、以下のシンプルな .htaccess ファイルを試してください:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^.*$ htaccess_tester.php
</IfModule>

その後、この URL を表示させてください: http://yoursite.com/test 。実質どの path でも、 mod_rewrite が機能していることを示す成功メッセージが表示されます。

テストが終わったら、テストファイルを削除し、 .htaccess ファイルを戻してください:

rm htaccess_tester.php
mv .htaccess-backup .htaccess

Grav の 404 ページ

404 Not Found

Grav スタイルで Error 404 のエラーが表示された場合は、 .htaccess は正しく機能していますが、 Grav が探せないページを表示しようとしています。

この問題の最もよくある原因は、単に、ページが移動したか、名前を変更したことによるものです。もうひとつチェックするのは、ページの YAML フロントマターに slug が設定されているかどうかです。 これは、デフォルトでは URL 構築に使われるフォルダ名を明示的に上書きします。

別の原因としては、ページが not routable である可能性です。ページの routale オプションは、ページのフロントマター で設定できます。

Nginx での 404 Page Not Found

サイトがサブフォルダーにある場合は、 nginx.conf の location をそのサブフォルダーへ確実に向けてください。 Grav の nginx.conf サンプル では、コード内に方法を説明するコメントが含まれています。

ホームページでは動くのに、他のページでは not found になる場合は、 nginx.conf が、サンプルの nginx.conf のとおりに設定されているか、確認してください。