Laravel 4 虚拟主机和 mod 重写设置

Posted

技术标签:

【中文标题】Laravel 4 虚拟主机和 mod 重写设置【英文标题】:Laravel 4 Virtual Host and mod rewrite setup 【发布时间】:2013-11-17 02:41:06 【问题描述】:

我已经尝试了几个小时来安装 Laravel 4 并使虚拟主机和路由工作,但到目前为止我一直很不走运。我提到我是在 Windows 7 机器和 WAMP 上执行此操作的。

我将描述我已经完成的工作:

我已启用 rewrite_module。

使用以下内容更新了 httpd-vhosts.conf:

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/laravel/public"
    ServerName laravel.dev
    ServerAlias www.laravel.dev
</VirtualHost>

接下来,我设置了etc/hosts

127.0.0.1       localhost
127.0.0.1       laravel.dev

此外,wamp/../conf/httpd.confwamp/.../conf/original/httpd.conf 中的以下行均未注释:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

Include conf/extra/httpd-vhosts.conf

.htaccess的内容如下:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

然而,当我转到 http://laravel.dev 时,我收到 Internal Server Error - 服务器遇到内部错误或配置错误,无法完成您的请求。

如果我从 public 文件夹中删除 .htaccess 文件,那么我会看到 Laravel “你已经到达”消息。如果那时,我创建一个这样的路由(在 app\routes.php 内):

Route::get('/newroute', function()

    return View::make('hello');
);

然后转到http://laravel.dev/newroute 我会得到一个404 Not Found - 在此服务器上找不到请求的 URL /newroute。

我很困惑,不知道如何才能克服这个问题。我提到(虽然我认为很清楚)我在克隆项目模板、安装依赖项后运行了composer install

【问题讨论】:

所以你有 2 个 htaccess 文件? “public”目录下的htaccess文件是什么? 【参考方案1】:

尝试通过将您的 VirtualHost 更改为:打开目录上的 AllowOverride All:

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/laravel/public"
    ServerName laravel.dev
    ServerAlias www.laravel.dev
    <Directory "c:/wamp/www/laravel/public">
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

【讨论】:

您是否取消了 httpd.conf 中“LoadModule rewrite_module modules/mod_rewrite.so”的注释? 是的,没有注释 在 *nix 系统上不要忘记更改文件权限以便 apache 可以访问它们,例如“sudo chown -R apache:apache path_to_your_project/” - 在 Fedora 中使用此【参考方案2】:

如果您发布的 htaccess 文件位于您的 /public/ 文件夹中,那么这就是您收到 500 内部服务器错误的原因。该 htaccess 文件是为/public/ 文件夹所在的文件夹制作的。但由于您的公用文件夹是文档根目录,因此您不需要它。

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

Options +FollowSymLinks
RewriteEngine On

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

(用于 WAMP)。

【讨论】:

非常感谢,它解决了我的问题【参考方案3】:

我遇到了同样的问题,按照上面给出的所有处理方法,但无法设置虚拟主机。

当我检查文件 http.conf 时,我发现包含文件 httpd-vhosts.conf 的注释如下所示。确保在 httpd.conf 中包含 httpd-vhosts.conf

#Include conf/extra/httpd-vhosts.conf

我删除了# 评论。重新启动了 wamp,它正在工作。

Include conf/extra/httpd-vhosts.conf

【讨论】:

以上是关于Laravel 4 虚拟主机和 mod 重写设置的主要内容,如果未能解决你的问题,请参考以下文章

虚方法和抽象类

xdebug、PhpStorm 和 Laravel 3 / mod_rewrite 未命中断点

C++_多态详谈

C++多态

这个 apache2.4 和 laravel 设置合适的虚拟主机是啥?

为同一虚拟主机中的多个 laravel 应用重写规则