4

我最近使用 WampServer(2.4 版)创建了一个虚拟主机,因此我可以使用 url http://yannbergonzat.local访问我的本地网站:

<VirtualHost *>
    ServerName yannbergonzat.local
    DocumentRoot "F:\Projets\Web\yann"
    DirectoryIndex index.php
</VirtualHost>

这是来自 httpd.conf 的 Directory 标签:

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>

这个网站是用 Symfony2 制作的,所以 yannbergonzat.local 指向一个文件夹。如果你想访问实际的网站,你必须去 yannbergonzat.local/web/app.php 。

我创建了一个 .htaccess 文件,因此可以使用 yannbergonzat.local 看到该网站:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ web/$1 [QSA,L]
</IfModule>

现在是问题所在。根据 AllowOverride 的值,会出现错误。

当 AllowOverride 设置为“all”时

读取 .htaccess 文件,可以在 yannbergonzat.local 上访问该站点,但无法访问另一个文件夹中的资源(样式表、javascript)(错误 403)

当 AllowOverride 设置为“无”时

.htaccess 文件没有被读取,在 yannbergonzat.local 上无法访问该站点(它显示了文件夹的内容),您必须编写整个 url(yannbergonzat.local/web/app.php),但是资源可以访问另一个文件夹中的(样式表、javascript) 。

我应该怎么做才能使 yannbergonzat.local 上的网站与其他文件夹中的资源正常工作?

4

3 回答 3

9

此更改httpd.conf非常危险

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>

因为它允许对您安装 WampServer( Apache ) 的整个驱动器的所有访问,如果那是 C:\ 驱动器,那么您让黑客的生活变得非常轻松!

您应该将 httpd.conf 改回

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

并将目录规范添加到您的 VHOST 定义中,如下所示

<VirtualHost *:80>
    ServerName yannbergonzat.local
    DocumentRoot "F:\Projets\Web\yann"
    DirectoryIndex index.php
    <Directory "F:\Projets\Web\yann">
        Options Indexes FollowSymLinks
        AllowOverride all
        Require all granted
    </Directory>
</VirtualHost>

AllowOverride none是 Apache 忽略任何.htaccess文件的指令,因此可以解释您所描述的内容。

在设置 Symfony2 站点时,这是虚拟主机设置的推荐配置。您将/web文件夹指定为DocumentRoot 查看文档

所以我假设(你没有指定实际的文件夹结构)你需要这样的东西:

<VirtualHost *:80>
    ServerName yannbergonzat.local
    DocumentRoot "F:/Projets/Web/yann/web"
    DirectoryIndex index.php

    <Directory "F:/Projets/Web/yann/web">
        # enable the .htaccess rewrites
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

这几乎肯定会修复您的 403 错误,因为您现在授予访问Require all granted该站点实际存在的文件夹的权限。

于 2014-04-19T17:51:26.863 回答
2

这段代码对我有用:

sudo chmod -R 755 /var/www/***
于 2015-02-27T14:31:18.587 回答
0

确保 SELinux 没有阻止对您的 Web 目录的访问:

chcon -R -u system_u -t httpd_sys_content_t /home/user/www
于 2017-08-14T07:50:12.663 回答