Routes not working without index.php

让人想犯罪 __ 提交于 2019-12-04 01:17:25
The Alpha

Pretty URLs

The framework ships with a public/.htaccess file that is used to allow URLs without index.php. If you use Apache to serve your Laravel application, be sure to enable the mod_rewrite module.

If the .htaccess file that ships with Laravel does not work with your Apache installation, try this one:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

For more related help, check this answer.

I enabled the mod_rewrite module in the Apache HTTP server, restarted Apache service and tested again and it WORKED!!!

Below is the code i used to enable mode_rewrite;

1) Un-Hash this line in Apache/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so

2) Create a new configuration for "sample-project" without modifying the default configuration in the httpd.conf file

Directory "C:/Apache24/htdocs/sample-project">
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  Allow from all
Directory>

Be Alert! If it is not working even after enabling rewrite module. You need to change the line "AllowOverride None" to "AllowOverride All" in httpd.conf.

As @The Alpha alerted, Laravel don't need to be configured for this purpose.

Max Desmos

When you change the line AllowOverride None to AllowOverride All in httpd.conf be sure that you do it inside <directory ...> that contains valid path.

Example

<Directory "/var/www/html"> #check path
   Options Indexes FollowSymLinks
   AllowOverride All
</Directory>

set this in your .htaccess

DirectoryIndex index.php

<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]

For some reasons the answers above are not working for me, so here is the only one that worked for me.

I am using ubuntu 18.04 amd64 as my development server environment. So I modified apache.conf file located at/etc/apache2

From:

<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted

To:

<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted

And Also From:

<Directory /usr/share> AllowOverride None Require all granted

To

<Directory /usr/share> AllowOverride All Require all granted

After that, you need to restart apache using sudo service apapche2 restart command in the terminal

Now I can access the page without using index.php in the URL

Credit goes to: joshymatheww @ Laracasts servers discussion channel on Aug 5, 2017

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!