web-dev-qa-db-ja.com

私のルートは404を返しています、どうすれば修正できますか?

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

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

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

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

class User_Controller extends Base_Controller {

    public $restful = true;

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

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

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

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

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

72
JasonMortonNZ

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

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

$restfulを使用していることがわかります。この場合、RouteRoute::any('user', 'user@index')に設定できます。これは、両方を別々に書き込むのではなく、POSTGETの両方を処理します。

22
PapaSmurf

Ubuntu LAMPのインストールで、次の2つの変更によりこの問題を解決しました。

  1. Apacheサーバーでmod_rewriteを有効にします:Sudo a2enmod rewrite
  2. / etc/Apache2/Apache2.confを編集し、/ var/wwwディレクトリ(メインドキュメントルート)の「AllowOverride」ディレクティブを変更します:AllowOverride All

次に、Apacheサーバーを再起動します:service Apache2 restart

94
Andrew Vickers

WAMPを使用して、wampアイコン-> Apache-> Apache modules-> scrollをクリックし、rewrite_moduleを確認します。LoadModule rewrite_moduleを再起動します。

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

63
Mario Uvera

確認しようとしたことがありますか

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

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

35
user1930566

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>
8
Simon East

root/public/.htaccessroot/.htaccessに移動しようとすると、動作するはずです

6
Wasim A.

ルート

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

コントローラー

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

問題の解決策

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

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

Route::controller('user');

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

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

Route::controller(Controller::detect());
5
David Barker

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

例えば ​​:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
3
Mathieu Perino

それでは、この問題を1日少しの間頭でたたいて...起きて昨日やるべきことをし、何が起こっているかをデバッグしました!

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

ありがたいことに、laravelは、アプリのpublicフォルダーにある便利な.htaccessファイルに正しい書き換えルールを提供します。問題は、その「.htaccess」ファイル内のコードは、WAMPがデフォルトで設定されている方法では機能しないことです。このSEEMSの理由は、このスレッドの先頭にあるmuveraが示唆する問題です。rewrite_moduleコードは、RewriteRuleが機能する前にApacheによってロードされる必要があります。これは理にかなっています。

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

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

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

3
mdg

HomesteadでVagrantを使用している場合、共有フォルダーのマウント中にエラーが発生した可能性があります。 Vagrantはそのフォルダからファイルを取得し、起動時に実際にホストマシン上にあるファイルをスワップアウトするように見えるので、エラーがあった場合、あなたは本質的にいつからLaravelインストールにアクセスしようとしています最初に作成しました(これが、インストール時に生成された「ホーム」のみを取得する理由です)。

これを簡単に確認するには、vmにsshingし、routes/web.phpファイルをチェックして、実際に自分のファイルかどうかを確認します。そうでない場合は、終了してvagrant haltvagrant upを起動し、起動時にエラーを探します。

0

Laravel 5コマンドを使用する必要があります

  class User_Controller extends Controller {
  public $restful = true;
  public function get_index(){
  return View('user.index');
  }
  }

とroutes.phpで

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

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

ビューとコントローラーのLaravel 5コマンドの変更は、以前に同じエラーが発生していたドキュメントを参照してください

0
Rohan Kalra

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

 composer dump-autoload
0
Bakhtawar GIll

ルートが機能しない主な問題は、macosにmod_rewrite.soモジュールがあり、Apache構成のhttpd.confファイルでlinuxが有効になっていないため、.htaccessが機能することです。行のコメントを外すことでこれを解決しました:

LoadModule rewrite_module libexec/Apache2/mod_rewrite.so

上記の行httpdf.confから#を削除します。その後、動作します。楽しい!

0
Pramod yadav

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

0
dajavax
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');
});

ルートの最後に「/」(ホーム/デフォルト)を使用する必要があります

0
athula

laravelパブリックフォルダー内のデフォルトの.htaccessファイルを削除したと思います。問題を解決する必要があるファイルをアップロードします。

0
jewelhuq

依存関係を自動的にロードする単純なコマンド

composer dump-autoload

まだいくつかの重要なファイルが欠落しているので、手順全体を見るにはこちらにアクセスしてください

https://codingexpertise.blogspot.com/2018/11/laravel-new.html

0
user10730910