问题
I am new to laravel. I am using Ubuntu 15.04. I installed Laravel Framework version 5.1.7 (LTS) using composer and a lamp server using $ sudo apt-get install lamp-server^ command (I didn't install Homestead). I am using PhpStorm 8.0.3 as IDE.
I created three routes and a controller. The PagesController.php file looks like this:
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!';
}
}
and the routes.php looks like this:
Route::get('/', 'PagesController@index');
Route::get('about', 'PagesController@about');
Route::get('hello', 'PagesController@hello');
Whenever I go to http://localhost:63342/my-first-app/public/ (or http://localhost:63342/my-first-app/public/index.php) it works fine and shows me the Welcome to my homepage! message. But whenever I go to http://localhost:63342/my-first-app/public/hello or http://localhost:63342/my-first-app/public/about, what I get is 404 Not Found message.
Also, the .htaccess file which is located at my-first-app/public looks like this:
<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>
What I have tried:
- I tried
http://localhost:63342/my-first-app/public/index.php/helloorhttp://localhost:63342/my-first-app/public/index.php/aboutbut it doesn't work either. - I entered command
sudo a2enmod rewritefollowed bysudo service apache2 restartbut it doesn't work either. - I tried
composer dump-autoloadbut it doesn't work either. I changed
AllowOverridefromNonetoAllinapache2.conf. Now part of it looks like this:<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>but it doesn't solve the problem either.
Update (7/15/2015):
The result of running php artisan route:list looks like this:
+--------+----------+-------+------+--------------------------------------------+------------+
| 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 | |
+--------+----------+-------+------+--------------------------------------------+------------+
回答1:
Enable apache2 rewrite module:
sudo a2enmod rewrite
Then restart the apache2 server:
sudo service apache2 restart
And make sure that AllowOverride All to your apache2 config file.
回答2:
I have been having this annoying problem for a long time. Open .htaccess file in public folder and replace the following code, make a backup of your original code just in case.
<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:
Altering .htaccess file would work in this scenario per laravel 5 official document as below:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
来源:https://stackoverflow.com/questions/31435283/laravel-5-only-root-route-works