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

Clu*_*oob 52 configuration apache2 .htaccess

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

我在某处读到新的默认文件是 000-default.conf。所以我编辑了那个并尝试添加以下行:

AllowOverride All
Run Code Online (Sandbox Code Playgroud)

但是Apache2没有正确重启并报错。从 apache2 文档中,我发现 AllowOverride 只允许在该<Directory>部分下。然后我尝试添加这个:

<Directory "/var/www">
AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)

这似乎有效。但我不确定是否应该将 /var/www 放在那里。这是正确的做法还是我的电脑会以某种方式炸毁?

Dan*_*Dan 64

tl;博士

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


正如您所发现的,AllowOverride仅在该Directory部分下允许。

使用您的示例:

<Directory "/var/www">
    AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)

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


举个更好的例子,假设你的虚拟主机中有以下配置:

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

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>
Run Code Online (Sandbox Code Playgroud)

以及以下目录结构:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess
Run Code Online (Sandbox Code Playgroud)

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

对比目录结构和配置,意味着.htaccess文件/var/www夹及其子目录中的所有文件,不包括/var/www/uploads目录及其子目录,可以覆盖所有类型的指令。

但是/var/www/uploads,它的子目录只能使用该.htaccess文件来覆盖Allow,DenyOrder指令。

注意:从 apache 2.4(在 13.10+ 中默认可用)开始,Allow,DenyOrder指令被一个名为Require.


小智 44

首先使用以下命令启用重写:

sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

然后重启apache2:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

然后进入sites-available文件夹:

/etc/apache2/sites-available
Run Code Online (Sandbox Code Playgroud)

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

这将.htaccess在您的服务器 VPS 中工作。

这适用于 Ubuntu 12.04.5 VPS。

  • 没有名为 default 的文件 - 但有一个名为 000-default.conf 的文件 (4认同)