88

Laravel フレームワークの学習を始めたばかりで、ルーティングに問題があります。

機能している唯一のルートは、デフォルトで Laravel にアタッチされているデフォルトのホーム ルートです。

私は Windows で WAMP を使用しており、PHP 5.4.3 と Apache 2.2.22 を使用しています。また、mod_rewrite を有効にしており、application.php 構成ファイルから「index.php」を削除して空の文字列を残しています。

Userという新しいコントローラーを作成しました。

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

application/views/user/に、いくつかの基本的な HTML コードを含むindex.phpというビュー ファイルを作成し、routes.php に以下を追加しました。

Route::get('/', function () {
    return View::make('home.index');
});

Route::get('user', function () {
    return View::make('user.index');
});

Web ブラウザーでルート ( ) にアクセスすると、最初のルートは正常に機能http://localhost/mysite/publicしますが、2 番目のルートに移動しようとするとhttp://localhost/mysite/public/user、404 Not Found エラーが発生します。なぜこれが起こるのでしょうか?

4

19 に答える 19

63

WAMP を使用して wamp アイコンをクリックします -> apache -> Apache modules -> スクロールして rewrite_module を確認します LoadModule rewrite_module を再起動します

「rewrite_module」を有効にすると、サーバー アプリケーションが自動的に再起動することに注意してください。

于 2013-01-23T22:33:38.823 に答える
37

かどうかを確認しようとしましたか

http://localhost/mysite/public/index.php/user 

仕事をしていました?その場合は、すべてのパスのフォルダーに大文字が含まれていないことを確認してください。私は同じ状況にあり、文字を小文字に変換するのに役立ちました。

于 2012-12-26T19:30:50.203 に答える
25

代わりにこれをルートファイルに追加しようとしましたRoute::get('user', "user@index")か?

@この場合、の前のテキストuserはページをユーザー コントローラーに向け、 の後のテキスト@indexスクリプトをuser関数に向けますpublic function get_index()

を使用$restfulしているようですが、その場合は を に設定できRouteますRoute::any('user', 'user@index')。これは、両方を別々に書き出すのではなく、POSTとの両方を処理します。GET

于 2012-08-03T15:38:42.190 に答える
9

EasyPHP を使用して同じ問題が発生していました。AllowOverride All<Directory>ブロックで指定する必要があることがわかりましたhttpd.conf。これがないと、Apache は時々あなたの.htaccess.

私のはこんな感じになりました…。

<Directory "D:/Dev">
    Options FollowSymLinks Indexes
    #### NEXT IS THE CRUCIAL LINE ####
    AllowOverride All                  
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
    Require all granted     
</Directory>
于 2013-12-21T14:27:19.157 に答える
6

あなたはに移動しようとすることができroot/public/.htaccessroot/.htaccessそれはうまくいくはずです

于 2016-12-22T18:17:03.787 に答える
5

ルート

それらを使用して、コントローラーによって管理されない特定のルートを定義します。

コントローラー

従来の MVC アーキテクチャを使用する場合に使用します

あなたの問題の解決策

コントローラー アクションに特定の「名前付き」ルートが必要でない限り、コントローラーをルートとして登録しません。

コントローラー アクションのルートを作成するのではなく、コントローラーを登録するだけです。

Route::controller('user');

これでコントローラーが登録され、移動して実行できhttp://localhost/mysite/public/userますget_index

すべてのコントローラーを一度に登録することもできます。

Route::controller(Controller::detect());
于 2012-08-03T14:57:27.547 に答える
3

OK、この問題について 1 日強頭を悩ませた後... 起きて、昨日すべきことを実行し、何が起こっているのかをデバッグしました!

ここで Laravel がやろうとしているのはindex.php、ルートとして指定されたパスの直前にファイルを挿入することです。たとえば、ブラウザでa を指定しRoute::get('/account/create', ...,てアプリを実行した場合、laravel は を実行したいのですが、それを行うには .... Apache はそのリクエストを通過する必要があります (パスは場所によって多少異なる場合があります)。 laravel アプリが実際にインストールされますが、末尾は置換が必要な場所です) 'RewriteRule' を適用する必要があります。localhost/laravel/authenticate/public/account/createlocalhost/authenticate/public/index.php/account/create/wamp/www/laravel/laravel/authentication/publicpublic

ありがたいことに、laravel は正しい Rewrite ルールを.htaccessアプリのpublicフォルダー内の便利なファイルで提供します。問題は、その '.htaccess' ファイル内のコードが、そのままでは WAMP が構成されている方法では機能しないことです。この SEEMS がこのスレッドの上部にある muvera によって提案された問題である理由 - rewrite_module コードは、機能する前に Apache によってロードされる必要がありますRewriteRule。これは理にかなっています。

意味をなさない部分: 単純stoppingに、restartingApache サービスは、WAMP が RewriteRule で正しいことを行うために必要な変更を取得しません。私はこれを何度も試しました!

何が機能するか: muvera (スレッドの上部を参照) によって提案された変更を加えて、正しいモジュールをロードします。次に、Windows セッション全体をリセットして、Apache をメモリから完全にダンプします。WAMP を再起動 (リロード) してください。修正が機能し、正しい RewriteRule が適用されます。yada、yada; 末永く幸せに暮らしております。

.htaccessこれらすべてからの良いニュース: 、RewriteRule、およびhttpd.confファイルについて多くのことがわかりました。public .htaccessアプリのファイルからロジックを移動し、Apache の「bin」フォルダー BTW の httpd.conf のセクションに配置することには、適切な (パフォーマンス) 引数がありDirectory ...ます (特にそのフォルダーにアクセスできる場合)。

于 2014-03-15T18:31:55.530 に答える
3

の " " を忘れないRewriteBaseでくださいpublic/.htaccess:

例えば ​​:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
于 2013-05-31T23:25:27.250 に答える
3

端末で実行するだけです。

php artisan route:clear
于 2021-07-08T09:41:04.900 に答える
0
Route::get('/', function()
{
return View::make('home.index');
});

Route::get('user', function()
{
return View::make('user.index');
});

上記をに変更

Route::get('user', function()
{
return View::make('user.index');
});

Route::get('/', function()
{
return View::make('home.index');
});

ルートの最後に「/」(home/default) を使用する必要があります

于 2013-12-27T10:56:28.673 に答える
0

php.ini で短い php タグを有効にしてみてください。WAMPは通常それらをオフにしており、laravelはそれらをオンにする必要があります。

于 2012-09-30T00:06:00.467 に答える
0

端末で実行するだけです。

 composer dump-autoload
于 2016-09-02T11:50:54.477 に答える