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を使用しています。
笑って、/index.php/hello
動作します。
もしそうなら、おそらくそれは.htaccess
問題。
WAMP(Windows 8)でLaravel 4を実行すると同じ問題が発生しました。
解決策は次のとおりです。
Apache httpd.confを開き、次の行を見つけます。
#LoadModule rewrite_module modules/mod_rewrite.so
#
)httpd.conf
動作するはずです!
私は同じ問題を抱えていましたが、解決策はApache2でrewrite modを有効にすることでした
ターミナルでは、次のコマンドを使用します。
$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart
そして魔法!
まったく同じ問題がありました。
これを修正するために必要な2つのこと:
AllowOverrideをNoneからAllに変更します。例(Apache 2.4.9):
オプションインデックスFollowSymLinks MultiViews AllowOverride Allすべての付与が必要
参考:Laravel WAMPの代わりにVirtualBoxとVagrantと一緒にHomesteadを使用してください。Apacheの代わりにNginxが含まれていますが、Laravel 。
Mod_rewriteを有効にした後でも、laravel/publicフォルダーにエイリアスを作成すると、この問題に直面する可能性があります。
追加中
RewriteBase /your_Apache_alias
.htaccessにトリックを行います。
Home以外を定義する場合、/は必要ありません。
Route::get('hello', function()
{
return View::make('hello');
});
動作するはずです。
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
これらすべてを成功せずに試した後、別の投稿を見つけて.htaccessをこれに変更しました:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
Laravel 4は静的ファイルのマップからファイルを自動ロードするため、新しいコントローラーを追加するときにそのファイルを更新する必要があります。このコマンドを実行して静的ファイルを再構築します。
php composer.phar dump-autoload
以前の回答には少し欠陥がありました。これが役立つかもしれません。
$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart
願っています。
「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>
この問題が発生しました(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
これが機能せず、セキュリティを気にしない場合。
@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>
に行く
nano/etc/nginx/sites-available/yoursite
try_fileを見つけて、次のように置き換えます。
try_files $uri $uri/ /index.php?$query_string;
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
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
を実行して、変更を有効にします。
このコメントは少し遅れるかもしれませんが、役に立つかもしれません。このような別のビューにルーティングするときに同じ問題が発生しました:
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ベース)での作業
この更新は私のために働いた。 .htaccessファイルでは、リライタを有効にした後に次を追加するだけです。
Options -Indexes
Options +FollowSymLinks
魅力のように働いた