[英]laravel 5 only root route works
我是 laravel 的新手。我正在使用 Ubuntu 15.04。 我使用 composer 安裝了 Laravel 框架版本 5.1.7 (LTS),並使用$ sudo apt-get install lamp-server^
命令安裝了燈服務器(我沒有安裝 Homestead)。 我使用PhpStorm 8.0.3
作為 IDE。
我創建了三個路由和一個PagesController.php
文件如下所示:
class PagesController extends Controller
{
public function index()
{
return 'Welcome to my homepage!';
}
public function about()
{
return 'Learn a little about me.';
}
public function hello()
{
return 'Hello World!';
}
}
routes.php
看起來像這樣:
Route::get('/', 'PagesController@index');
Route::get('about', 'PagesController@about');
Route::get('hello', 'PagesController@hello');
每當我 go 到http://localhost:63342/my-first-app/public/
(或http://localhost:63342/my-first-app/public/index.php
)它工作正常並向我顯示Welcome to my homepage!
信息。 但是每當我 go 到http://localhost:63342/my-first-app/public/hello
或http://localhost:63342/my-first-app/public/about
時,我得到的是404 Not Found
消息。
此外,位於my-first-app/public
的.htaccess
文件如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
我試過的:
http://localhost:63342/my-first-app/public/index.php/hello
或http://localhost:63342/my-first-app/public/index.php/about
但它沒有要么工作。sudo a2enmod rewrite
然后是sudo service apache2 restart
但它也不起作用。composer dump-autoload
但它也不起作用。 我在None
中將AllowOverride
apache2.conf
更改為All
。 現在它的一部分看起來像這樣:
<Directory /> Options FollowSymLinks AllowOverride All Require all denied </Directory> <Directory /usr/share> AllowOverride All Require all granted </Directory> <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <Directory /srv/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
但它也沒有解決問題。
更新(2015 年 7 月 15 日):
運行php artisan route:list
的結果如下所示:
+--------+----------+-------+------+--------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-------+------+--------------------------------------------+------------+
| | GET|HEAD | / | | App\Http\Controllers\PagesController@index | |
| | GET|HEAD | about | | App\Http\Controllers\PagesController@about | |
| | GET|HEAD | hello | | App\Http\Controllers\PagesController@hello | |
+--------+----------+-------+------+--------------------------------------------+------------+
啟用 apache2 重寫模塊:
sudo a2enmod rewrite
然后重啟apache2服務器:
sudo service apache2 restart
並確保AllowOverride All
到您的 apache2 配置文件。
我被這個煩人的問題困擾了很長時間。 在公共文件夾中打開.htaccess
文件並替換以下代碼,備份您的原始代碼以防萬一。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>
第 1 步:啟用 mod_rewrite
須藤 a2enmod 重寫
第 2 步:要激活這些更改,請重新啟動 Apache2
須藤服務 apache2 重啟
現在檢查您的網頁是否正常工作。 如果沒有,請按照第 3 步操作。
第 3 步:編輯 Apache 配置文件
要編輯運行以下命令:
須藤納米/etc/apache2/sites-available/000-default.conf
然后在<VirtualHost *:80>
下面添加以下代碼塊
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
保存文件並退出。
重啟apache2:
須藤服務 apache2 重啟
現在應該可以正常工作了。
根據 laravel 5 官方文檔,更改 .htaccess 文件將在這種情況下工作,如下所示:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
大多數時候初學者不會在他們的項目中創建.htaccess
文件,請確保從公共文件夾中復制.htaccess
文件並將其粘貼到項目的根目錄...
對於 Debian 11, Laravel 版本:8.83.10
我有類似的問題。
pico /etc/apache2/apache2.conf
然后更改以下塊解決了問題
<Directory /usr/share>
AllowOverride All
Require all granted
</Directory>
把 / 放在起點,路線的終點並不重要
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.