web-dev-qa-db-ja.com

Laravel 4ホームを除くすべてのルートが404エラーになります

Laravel 4を使用してComposer=をインストールし、仮想ホストも設定しました。現在、ルートルートのみが機能しています。

<?php

Route::get('/', function()
{
    return View::make('hello');
});

これではありません:

Route::get('/hello', function()
{
    return View::make('hello');
});

私がヒットしようとしているのは、TasksController at /tasks

Route::resource('tasks', 'TasksController');

これにより、404エラーも発生します。何が間違っているのでしょうか?プロジェクトのルートにデフォルトの.htaccessファイルがあります:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Macでlocalhostを使用しています。

58
Amit Erandole

笑って、/index.php/hello動作します。

もしそうなら、おそらくそれは.htaccess問題。

102
GaryJ

WAMP(Windows 8)でLaravel 4を実行すると同じ問題が発生しました。
解決策は次のとおりです。

  1. Apache httpd.confを開き、次の行を見つけます。

    #LoadModule rewrite_module modules/mod_rewrite.so
    
  2. この行のコメントを解除します(#
  3. セーブ httpd.conf
  4. WAMPを再起動します

動作するはずです!

38
Rutger

私は同じ問題を抱えていましたが、解決策はApache2でrewrite modを有効にすることでした

ターミナルでは、次のコマンドを使用します。

$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart

そして魔法!

27
manujas

まったく同じ問題がありました。

これを修正するために必要な2つのこと:

  1. enable rewrite_module Apacheで
  2. AllowOverrideをNoneからAllに変更します。例(Apache 2.4.9):

    オプションインデックスFollowSymLinks MultiViews AllowOverride Allすべての付与が必要

参考:Laravel WAMPの代わりにVirtualBoxとVagrantと一緒にHomesteadを使用してください。Apacheの代わりにNginxが含まれていますが、Laravel 。

14
Orhan

Mod_rewriteを有効にした後でも、laravel/publicフォルダーにエイリアスを作成すると、この問題に直面する可能性があります。

追加中

RewriteBase /your_Apache_alias

.htaccessにトリックを行います。

9
MartinGomez

Home以外を定義する場合、/は必要ありません。

Route::get('hello', function()
{
    return View::make('hello');
});

動作するはずです。

6
davzie

BUNTUユーザー向け-Ubuntu 18.04でテスト済み

1- mod rewriteを有効にします

Sudo a2enmod rewrite

2- Apache confファイルのAllowOverrideを変更します。

Sudo nano /etc/Apache2/Apache2.conf

このブロックでAllowOverrideをNoneからAllに変更します

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3- Apacheを再起動します

Sudo service Apache2 restart
6
BassMHL

これらすべてを成功せずに試した後、別の投稿を見つけて.htaccessをこれに変更しました:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
5
Dylan Glockler

Laravel 4は静的ファイルのマップからファイルを自動ロードするため、新しいコントローラーを追加するときにそのファイルを更新する必要があります。このコマンドを実行して静的ファイルを再構築します。

php composer.phar dump-autoload
4
Niklas Modess

以前の回答には少し欠陥がありました。これが役立つかもしれません。

$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart

願っています。

4
Caleb Mbakwe

「mod_rewrite」が原因で問題が発生することは明らかです。場合によっては、Apacheでこのモジュールを有効にするだけで修正できます。

しかし、私の場合、次の方法でVirtualHostの構成を拡張する必要がありました。

<VirtualHost *:80>

    ServerName adplus.local

    ServerAdmin [email protected]
    DocumentRoot /var/www/adplus.local/project/public

    **<Directory "/var/www/adplus.local/project/public">
        AllowOverride All
    </Directory>**

    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
3

この問題が発生しました(WindowsでApache 2.2を手動でインストールした場合)。httpd.confのルートディレクトリがデフォルトでNoneに設定されていたため、VirtualHostにAllowOverrideがありませんでした。

FileInfo Options=MultiViewsは、Laravelの.htaccessに必要な最小限のセットです

例えば.

<VirtualHost *:80>
    DocumentRoot "C:/htdocs/domain.com/laravel/public"
    ServerName foo.domain.com

    <Directory "C:/htdocs/domain.com/laravel/public">
        AllowOverride FileInfo Options=MultiViews
    </Directory>
</VirtualHost>

またはAllowOverride Allこれが機能せず、セキュリティを気にしない場合。

3
scipilot

@GaryJ&@MartinGomezが言ったようです。これは。htaccessの内容であり、Apacheサーバーで実行中のすべてのlaravel 4プロジェクトのpublicフォルダーに設定する必要があります。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteBase /

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
2
Heroselohim

に行く

nano/etc/nginx/sites-available/yoursite

try_fileを見つけて、次のように置き換えます。

try_files $uri $uri/ /index.php?$query_string;

2
Murali Krishna

Ubuntu 14.04とLumen 5.4で同様の問題が発生しました。

解決策は私にとって2つの部分でした。最初にvhostファイル/etc/Apache2/sites-enabled/my_vhost.confで、DocumentRootを宣言した後、オーバーライドを許可するために次の<Directory>エントリを追加する必要がありました。

    DocumentRoot /var/www/path/to/my/app/public

    <Directory "/var/www/path/to/my/app/public">
            Options FollowSymLinks
            AllowOverride All

            Order allow,deny
            Allow from all
    </Directory>

次に、次の方法で書き換えを有効にする必要がありました。

Sudo a2enmod rewrite
Sudo service Apache2 restart
1
Kimberly W

Nginxユーザーの場合、おそらくdefault仮想ホストをコピーしましたが、LaravelアプリケーションがNginxではなくルーティングを実行できるようにするには、Laravelをlocationディレクティブでカスタマイズする必要があります。

/etc/nginx/sites-available/your-site-nameで、locationディレクティブを次のように置き換えます。

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

次に、Sudo service nginx reloadを実行して、変更を有効にします。

1
Dylan Pierce

このコメントは少し遅れるかもしれませんが、役に立つかもしれません。このような別のビューにルーティングするときに同じ問題が発生しました:

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

Route::get('login', function () {
return view('login');
});

しかし、うまくいかなかったので、関連するすべての投稿で見つけたものをすべて試しましたが、私の問題を解決するのに十分ではなかったので、httpd.confでこの行を見つけました:

<Files ".ht*">
Require all denied
</Files>

そこで、「拒否」を「許可」に変更し、.htaccessで次の行もコメントしました。

#RewriteBase /

そして働いた!!この行により、Apacheはプロジェクトの.htaccessファイルを考慮しないので、grantに変更すると違いが生じます。これが同じ問題を抱えている人の助けになることを願っています。

Apache Server 2 @ Manjaro Linux(Archlinuxベース)での作業

0
Luis Torres

この更新は私のために働いた。 .htaccessファイルでは、リライタを有効にした後に次を追加するだけです。

Options -Indexes
Options +FollowSymLinks

魅力のように働いた

0
creationproject