Laravel 5 Apache mod_rewrite无效

时间:2015-07-05 06:17:37

标签: apache .htaccess laravel mod-rewrite

是的,有类似的问题,但建议的解决方案对我不起作用。 所以我设置了Laravel,安装工作正常。 好吧,只要我留在基线上

localhost/page/

一旦我试图点击我的一条路线,让我们说

localhost/page/subpage

并且路由配置为返回视图

Route::get('subpage', ['as' => 'subpage', 'uses' => 'GenericPageController@subpage']);

Controller中的方法subpage

public function subpage()
            {

                return view('base.subpage');
            }

每当我尝试点击其中一条路线时,我只是从服务器得到404响应。无论我使用什么样的控制器,或者它返回一个视图还是一个闭包都没关系。

  • 启用了mod_rewrite
  • 在主目录AllowOverride上设置 到All

.htaccess文件夹中的page/public如下所示:

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

RewriteEngine On
RewriteBase /

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

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

任何人都知道问题可能是什么?

1 个答案:

答案 0 :(得分:3)

.htaccess文件无法加载,因为它位于public目录中,这实际上是您的文档根目录。因此,您应该访问localhost/page/public/subpage

来访问该应用

如果要在保持目录结构不变的情况下使用localhost/page/subpage,则需要将新的.htaccess文件添加到page目录,然后删除 .htaccess目录中的public文件。

/page/.htaccess内容:

<IfModule mod_rewrite.c>

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

    RewriteEngine On
    RewriteBase /page/

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

    # Send requests to public directory...
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ public/index.php [L]

</IfModule>

不幸的是,由于Laravel获取请求信息的方式,您需要将路由分组到路由配置中的page目录:

Route::group(['prefix' => 'page'], function()
{
    Route::get('subpage', ['as' => 'subpage', 'uses' => 'GenericPageController@subpage']);
    // Your other routes ...
});

基本上,在我看来,这是解决这个问题的最简单方法。您还可以将public目录的内容上移一级,并在引导程序文件中相应地更改路径。