AllowOverride all导致错误403

Lil*_*zat 4 .htaccess wampserver symfony apache2.4

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

<VirtualHost *>
    ServerName yannbergonzat.local
    DocumentRoot "F:\Projets\Web\yann"
    DirectoryIndex index.php
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这是httpd.conf中的Directory标记:

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

这个网站是用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>
Run Code Online (Sandbox Code Playgroud)

现在是问题所在.根据AllowOverride的值,存在错误.

当AllowOverride设置为"all"时

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

当AllowOverride设置为"none"时

.htaccess文件未被读取,该网站无法访问yannbergonzat.local(它显示文件夹的内容),您必须编写整个网址(yannbergonzat.local/web/app.php),但资源(样式表,Javascript角),其是在另一个文件夹可以被访问.

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

Rig*_*lly 8

这种变化httpd.conf非常危险的

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

因为它允许所有访问你安装WampServer(Apache)的整个驱动器,如果这就是C:\驱动器你很容易让黑客生活!

您应该将httpd.conf更改为

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>
Run Code Online (Sandbox Code Playgroud)

并将目录规范添加到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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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