![这是在 Apache 2.4.7 中启用 htaccess 的正确方法吗](https://linux22.com/image/1082204/%E8%BF%99%E6%98%AF%E5%9C%A8%20Apache%202.4.7%20%E4%B8%AD%E5%90%AF%E7%94%A8%20htaccess%20%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E5%90%97.png)
几乎每个“如何激活 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
文件来覆盖Allow
、Deny
和Order
指令。
注意:从 apache 2.4(在 13.10+ 中默认可用)开始Allow
,Deny
和Order
指令已被名为 的单个指令取代Require
。
答案2
首先使用此命令启用重写:
sudo a2enmod rewrite
然后重新启动apache2:
sudo service apache2 restart
然后进入sites-available
文件夹:
/etc/apache2/sites-available
编辑名为 的文件default
并更改AllowOverride none
为AllowOverride 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
不太确定这是否是个好主意,但它确实对我有用,并且在我所处的环境中它是安全的。