我是laravel的新手。我正在使用Ubuntu 15.04。我使用composer和使用$ sudo apt-get install lamp-server^
命令的灯服务器安装了Laravel Framework版本5.1.7(LTS)(我没有安装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
消息。
此外,位于.htaccess
的{{1}}文件如下所示:
my-first-app/public
我尝试过:
<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
中将AllowOverride
从None
更改为All
。现在它的一部分看起来像这样:
apache2.conf
但它也没有解决问题。
更新(2015年7月15日):
运行<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>
的结果如下所示:
php artisan route:list
答案 0 :(得分:4)
我一直有这个烦人的问题很长一段时间。在公共文件夹中打开.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 :(得分:3)
启用apache2重写模块:
sudo a2enmod rewrite
然后重新启动apache2服务器:
sudo service apache2 restart
并确保AllowOverride All
到您的apache2配置文件。
答案 2 :(得分:2)
在每个laravel 5官方文档中,更改.htaccess文件将在此方案中起作用,如下所示:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
答案 3 :(得分:1)
第1步:启用mod_rewrite
sudo a2enmod重写
第2步:要激活这些更改,请重新启动Apache2
sudo服务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服务apache2重新启动
现在应该可以正常工作了。
答案 4 :(得分:1)
大多数情况下,初学者不会在其项目中创建.htaccess
文件,请确保从公用文件夹中复制.htaccess
文件并将其粘贴到您项目的根目录中...