laravel 5 只有根路由有效
Posted
技术标签:
【中文标题】laravel 5 只有根路由有效【英文标题】:laravel 5 only root route works 【发布时间】:2015-10-04 18:45:51 【问题描述】:我是 laravel 的新手。我正在使用 Ubuntu 15.04。我使用 composer 安装了 Laravel Framework 版本 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');
每当我转到http://localhost:63342/my-first-app/public/
(或http://localhost:63342/my-first-app/public/index.php
)时,它都能正常工作并向我显示Welcome to my homepage!
消息。但是每当我去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
,但也没用。
我在apache2.conf
中将AllowOverride
从None
更改为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 | |
+--------+----------+-------+------+--------------------------------------------+------------+
【问题讨论】:
运行“php artisan route:list”并粘贴输出。您应该在那里看到所有已定义的路线。 @jedrzej.kurylo 感谢您的回复。我在问题的末尾添加了结果。 你能添加 dd('test');在索引文件的顶部,转到“localhost:63342/my-first-app/public/index.php/about”,看看是否会输出测试?这样我们就可以知道是重写还是 Laravel 代码 @jedrzej.kurylo 我在index.php
文件的顶部添加了dd('test');
。现在,当我转到 http://localhost:63342/my-first-app/public/index.php
时,它会显示一个空白页面,而当我转到 http://localhost:63342/my-first-app/public/index.php/about
时,它会给我同样的 404 Not Found
消息。
您能否在您的控制台中运行php artisan serve --port 8000 --host 127.0.0.1
(可能是终端,因为您在Linux 中)然后导航到http://localhost:8000/about
并告诉我们会发生什么?另外,请记住您可能必须在您的 lampp 上启动您的 apache 服务器。
【参考方案1】:
启用 apache2 重写模块:
sudo a2enmod rewrite
然后重启apache2服务器:
sudo service apache2 restart
并确保 AllowOverride All
到您的 apache2 配置文件。
【讨论】:
这是linux最简单的方法。这个对我有用。谢谢【参考方案2】:这个烦人的问题困扰我很久了。打开公用文件夹中的.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>
【讨论】:
非常感谢分享这个解决方案。它对我有用。【参考方案3】:第 1 步:启用 mod_rewrite
sudo a2enmod 重写
第 2 步:要激活这些更改,请重新启动 Apache2
sudo service apache2 重启
现在检查您的网页是否正常工作。 如果不按照第 3 步操作。
第 3 步:编辑 Apache 配置文件
要编辑运行以下命令:
sudo nano /etc/apache2/sites-available/000-default.conf
然后在<VirtualHost *:80>
下面添加以下代码块
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
保存文件并退出。
重启apache2:
sudo service apache2 重启
现在应该可以正常使用了。
【讨论】:
我更新了你的答案以包含ReWriteEngine On
只是为了更好的衡量【参考方案4】:
根据 laravel 5 官方文档,在这种情况下更改 .htaccess 文件将起作用,如下所示:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
【讨论】:
【参考方案5】:大多数时候初学者不会在他们的项目中创建.htaccess
文件,请确保从公共文件夹中复制.htaccess
文件并将其粘贴到项目的根目录中...
【讨论】:
以上是关于laravel 5 只有根路由有效的主要内容,如果未能解决你的问题,请参考以下文章