2016-04-29 13 views
0

は、私はシンプルなroutes.phpファイルを持って、それは次のようになります。私は、サーバーに自分のアプリケーションを入れたらLaravel 5路線とmod_rewriteの

Route::group(['middleware' => 'cors', 'prefix' => 'api'], function() { 
    Route::post('users', 'Api\[email protected]'); 
    Route::get('users/{userId}/leagues/', 'Api\[email protected]'); 
}); 

、私が実行される経路のいずれかに得ることができませんでした。私は404の例外を取得していた。

ファイルの先頭に123を入れて、routes.phpファイルで明白なエラーを作りました。その後、私はmydomain.com/users/1/leaguesとヒットしました。私はエラーページがあると予想していました。構文エラーがありましたが、それは起こりませんでした(まだ404を取得しています)。このような何か追加する際 しかし、:

Route::get('/', function() { 
    return 'Hello'; 
}); 

を、ホームルートmydomain.comを打つ、私はそれを固定した後、Helloは最初の構文エラーで見ることができました、と。

mod_rewriteがリモートサーバで有効になっていないことがわかってから数時間を要しました。

誰かがこれにもっと光を当てることができますか? 私の要求がroutes.phpに届かなかった理由(構文エラーがあることを示すことさえできません)が、代わりに404ページが返されました。なぜmod_rewriteが動作するのですか? /route.phpに達しましたが、/usersに達した可能性があります。しなかった?

ありがとうございます!

答えて

1

ドキュメントルート(あなたのケースでは/)にリクエストすると、ApacheはDirectoryIndexと呼ばれるものを探します。そのようなリクエストが行われたときに読み込まれるデフォルトのファイルです。通常、このインデックスファイルはindex.php,index.html、またはwheteverがサーバー構成またはオーバーライドファイル(.htaccess)によって設定されています。

/をリクエストすると、デフォルトでindex.phpが配信されます。これはLaravelのブートストラップであり、アプリケーションの起動に必要な初期手順を実行します。これには、経路を取得して処理することも含まれます。それは、特定の要求であることを理解しているようしかし

、あなたが/somethingmod_rewriteを要求有効化されていない(またはAllowOverrideAllに設定されていないので、あなたの.htaccessファイルが読み込まれていない)、Apacheは、DirectoryIndexを提供しようとはしません作られています。 /somethingがドキュメントルートに存在しないため、Apacheによって404がスローされます。

だから、あなたは(あなたの端子にsudo a2enmod rewriteを入力するか、ホスティングプロバイダに話す)mod_rewriteが有効になっていることを確認し、自分の仮想ホストまたはデフォルトのサイト構成は、ドキュメントルートディレクトリのAllowOverride Allを設定していることを確認する必要があります。

あなたはまた、次のことを試してみてください:

FallbackResource /index.php 

このディレクティブは、代わりにこのモジュール404を投げるのindex.phpにフォールバックしmod_dirないmod_rewriteに依存しているが、通常はデフォルトで有効になっています。

+0

だから、正しいとすれば、 'mod_rewrite'が有効になっていないと、apacheは 'index.php'とブートストラップのルートを提供しません。php '(何か'/'と打ったとき)? mod_rewriteについてもっと読む必要があります。答えに感謝します。 – Ned

+1

確かに。 'routes.php'は' mod_rewrite'とは何の関係もないことを覚えておいてください。ここで重要なのは 'index.php'です。これは'/'を要求したときにのみ提供されます。 –