这是在 Apache 2.4.7 中启用 htaccess 的正确方法吗

这是在 Apache 2.4.7 中启用 htaccess 的正确方法吗

几乎每个“如何激活 htaccess”的解决方案都说需要编辑 /etc/apache2/sites-available/default 文件。但 Apache 2.4.7 中没有这样的文件

我在某处看到,新的默认文件是 000-default.conf。因此我编辑了该文件并尝试添加以下行:

AllowOverride All

但是 Apache2 无法正确重启,并报错。从 apache2 文档中,我发现 AllowOverride 仅在部分下允许<Directory>。然后我尝试添加以下内容:

<Directory "/var/www">
AllowOverride All
</Directory>

这似乎有效。但我不确定是否应该将 /var/www 放在那里。这是正确的做法吗?还是我的电脑会莫名其妙地崩溃?

答案1

总结

是的,这是正确的方法。
但要更语义.htaccess:是的,这是允许覆盖目录中所有指令的正确方法/var/www


正如你所发现的,AllowOverride仅在该节下才被允许Directory

使用你的例子:

<Directory "/var/www">
    AllowOverride All
</Directory>

这告诉 apache,所有配置都可以在/var/www及其所有子目录中被覆盖(递归)。


为了提供更好的示例,假设您在虚拟主机中有以下配置:

<Directory "/var/www">
    AllowOverride All
</Directory>

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

以及以下目录结构:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

我在这里所做的是在目录.htaccess的每个子目录中创建一个/var/www
通常不应该这样,但这只是为了举例子

将目录结构与配置进行比较,这意味着文件夹及其子目录.htaccess中的所有文件(不包括目录及其子目录)都可以覆盖各种指令。/var/www/var/www/uploads

/var/www/uploads及其子目录只能使用.htaccess文件来覆盖AllowDenyOrder指令。

注意:从 apache 2.4(在 13.10+ 中默认可用)开始AllowDenyOrder指令已被名为 的单个指令取代Require

答案2

首先使用此命令启用重写:

sudo a2enmod rewrite

然后重新启动apache2:

sudo service apache2 restart

然后进入sites-available文件夹:

/etc/apache2/sites-available

编辑名为 的文件default并更改AllowOverride noneAllowOverride All。有两行需要进行此更改。

这将使.htaccess您的服务器 VPS 能够正常工作。

这在 Ubuntu 12.04.5 VPS 上运行。

答案3

就我而言,它的工作方式如下:
我必须添加以下几行:

Order allow, deny
Allow from all

所以它看起来像这样:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

答案4

我在这些教程中遇到的一个常见问题是没有 default.conf 文件

/etc/apache2/sites-available

我找到了可以更改它的地方,但它是这里的 apache2.conf 文件

/etc/apache2/apache2.conf

不太确定这是否是个好主意,但它确实对我有用,并且在我所处的环境中它是安全的。

相关内容