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