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


46

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

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

AllowOverride All

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

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

这似乎可行。但是我不确定是否应该将/ var / www放在那儿。这是正确的方法还是我的计算机会以某种方式烧毁?


看到这个。它可能会帮助您。stackoverflow.com/questions/33062142/…–
阿万尼·阿洛克

Answers:


58

tl; dr

是的,这是正确的方法。
但是要更加语义化:是的,这是允许.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


39

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

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
没有名为default的文件-但有名为000-default.conf的文件
Tahir Yasin 2015年

1
+1是为了提醒您启用重写功能,我错过了这一点,无法弄清楚为什么在完成所有操作后它不起作用。
阿卜杜勒·曼南

此注释指的是Apache 2.2而不是2.4的配置。在2.4中,该default文件称为 000-default.conf,它不包含该AllowOverride None行。
ben_nuttall

该文件是000-default.conf,无法在AllowOverride None此处添加,如果您重新加载apache,请输入错误
Kreker

如果只需要允许覆盖mod_rewrite指令.htaccess,则最好使用AllowOverride FileInfo。尽管FileInfo已经包含大量指令,但是您仍将限制许多指令被覆盖。

3

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

Order allow, deny
Allow from all

所以看起来像这样:

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

尽管这可能已解决了您的问题,但它与OP的问题无关。order和allow伪指令是apache2.2及更早版本中的伪指令。它们用于允许/拒绝访问某些目录上的用户。它们对是否将解析.htaccess文件中的指令没有任何影响。
丹·丹

2

下面的代码片段如何在不更改默认配置的情况下在Apache 2.4中启用htaccess:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.