【问题标题】:Laravel 5 Apache mod_rewrite not workingLaravel 5 Apache mod_rewrite 不工作
【发布时间】:2015-09-22 12:38:30
【问题描述】:

是的,有类似的问题,但建议的解决方案对我不起作用。 所以我已经设置了 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 已启用
  • 在主目录上设置AllowOverrideAll

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

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

有人知道问题可能是什么吗?

【问题讨论】:

    标签: apache .htaccess laravel mod-rewrite


    【解决方案1】:

    .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 目录的内容上移一级,并在引导文件中相应地更改路径。

    【讨论】:

    • 我稍后会尝试,但还有一件事:我尝试使用 php 内置的网络服务器,它工作正常吗?
    • 如果您从public 目录运行服务器,它将工作。那是你做的吗?
    • 不,主目录与 xampp 相同。对于 xampp,它使用如下语法:server.php/subpage... 是否指向 .htaccess 错误?
    • 运行 PHP 服务器时,您需要从 page 目录运行命令 $ php -S localhost:8000 -t public/。更好的是,使用 Homestead 或 XAMPP 虚拟主机。
    • 啊,我想你误会我的意思了。所以 XAMPP 主目录(像往常一样)是 htdocs/page 。这里.htaccessmod_rewrite 不起作用。当我启动 php 服务器时,它按以下方式完成:$ php -S localhost:8000,整个命令在目录htdocs/page 中运行。不知道php服务器是否自动设置public目录为home目录?
    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2018-05-16
    • 2018-09-14
    • 2011-12-10
    • 2018-08-11
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多