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:
http://localhost:63342/my-first-app/public/index.php/hello
or http://localhost:63342/my-first-app/public/index.php/about
but it doesn't work either.sudo a2enmod rewrite
followed by sudo service apache2 restart
but it doesn't work either.composer dump-autoload
but it doesn't work either.I changed AllowOverride
from None
to All
in apache2.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 | |
+--------+----------+-------+------+--------------------------------------------+------------+
The Default Route FilesAll Laravel routes are defined in your route files, which are located in the routes directory. These files are automatically loaded by your application's App\Providers\RouteServiceProvider . The routes/web.php file defines routes that are for your web interface.
Laravel Reverse routing is the process of generating the URL based on name or symbol. It generates URL's based on route declarations. Reverse routing makes your application so much more flexible and helps the developer to write cleaner codes in View. It defines a relationship between links and Laravel routes.
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.
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>
Step 1: Enable mod_rewrite
sudo a2enmod rewrite
Step 2: To activate these changes restart Apache2
sudo service apache2 restart
Now check your web page is it working or not. If not follow Step 3.
Step 3: Edit Apache Configuration file
To Edit run below command:
sudo nano /etc/apache2/sites-available/000-default.conf
Then add following block of code below <VirtualHost *:80>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
Save the file and exit.
Restart apache2:
sudo service apache2 restart
It should be working fine now.
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With