Laravel Routes不工作,Apache配置只允许public / index.php / route

时间:2014-07-16 15:22:56

标签: apache .htaccess laravel

示例:

Route::get('/get', function() {
    return 'get';
});

要查看上面的路线,我必须导航到public / index.php / get。

我查看了很多SO帖子,并搜索了不同的东西,并没有发挥作用(是的,我每次都重启apache)。

这是公共目录中的.htaccess:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
</IfModule>

# For all files not found in the file system, reroute the request to the
# "index.php" front controller, keeping the query string intact

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

还有什么可能导致这种情况?我正在运行Ubuntu。

6 个答案:

答案 0 :(得分:59)

此行为的两个最常见原因是:

  1. 未启用mod_rewrite

    sudo a2enmod rewrite && sudo service apache2 restart

  2. AllowOverride设置为None,将其设置为All,假设为Apache2.4

    sudo nano /etc/apache2/apache2.conf

  3. 搜索<Directory /var/www/>并将AllowOverride None更改为AllowOverride All,然后保存文件并重新启动apache

答案 1 :(得分:20)

你是否在apache上安装并启用了mod_rewrite?尝试删除if行(和),并在尝试加载网站时查看是否抛出错误。如果是,请运行sudo a2enmod rewrite并重新启动apache。

这是我公共/目录中的.htaccess:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

答案 2 :(得分:2)

AllowOverride None更改为AllowOverride Allsudo a2enmod rewrite && sudo /etc/init.d/apache2 reload确实有所帮助。

答案 3 :(得分:1)

Apache配置文件中,该文件可能位于 /etc/httpd/conf/httpd.conf (位置和名称在服务器上有所不同),请提供对的AllowOverride权限。 htaccess文件,通过更新目录如下:

<Directory "/var/www/laravel-sample-project/public">
   AllowOverride All
</Directory>

这可能会解决您在laravel路线上的问题。

还要确保您要提供的访问权限“ AllowOverride All”仅限于上述目录,并且仅限于目录 / var / www / laravel-sample-project / public (此处提到)是我的项目的根目录,该目录可能因您而异)

答案 4 :(得分:0)

如果您不使用.htaccess文件,则需要指定重定向的目录:

  <IfModule mod_rewrite.c>
     RewriteEngine On

     <Directory /home/vitela/laravel/public>
      RewriteBase /public
      RewriteRule ^(.*)/$ /$1 [L,R=301]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ /index.php [L,QSA]
     </Directory>
  </IfModule>

答案 5 :(得分:0)

在MacOs中。 .htaccess无法正常工作的主要问题是在apache配置的httpd.conf文件中没有启用mod_rewrite.so。 我通过取消注释该行来解决这个问题:

LoadModule rewrite_module libexec / apache2 / mod_rewrite.so

从上面的httpdf.conf行中删除#。然后它会工作。享受!