我在专用服务器(Debian)上使用 Joomla 运行网站,我了解到将 .htaccess 规则移动到 apache2 配置文件可能会带来良好的性能提升(Apache HTTP 服务器教程:.htaccess 文件)。
/etc/apache2 中的主要配置文件:apache2.conf
在 apache2.conf 中,除了其他我能理解的指令之外,还有:
AccessFileName .htaccess
和
Include sites-enabled/
该服务器仅托管一个网站。在 sites-enabled 中还有另一个文件,其中包含附加指令 000-default:
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
通过 shell 运行“locate .htaccess”会返回一些结果:/usr/share/phpmyadmin/ 下的 2 个文件以及网站目录下的其他结果:/var/www。
我已经阅读了如何使用目录块将 htaccess 规则包含到 apache 配置文件中,但我主要有三个疑问:
1)我应该在哪里插入 htaccess 规则,在 apache2.conf 还是在 000-default 中?
2)由于性能改进是由于 apache 在主目录和子目录中查找 htaccess 文件的减少,我应该修改哪个指令?
AccessFileName .htaccess
或者
AllowOverride All
或者两者兼而有之?关于 AllowOverride All,000-default 中的哪个目录块中?
3) 禁用 AllowOverride All 后,我是否也应该包含 /usr/share/phpmyadmin 的 htaccess 指令,甚至使用 DocumentRoot /var/www 指令?
答案1
对于问题 1,有两个答案:
1) 没关系。启动时,文件会合并到单个内存配置中。将配置放在对您(服务器管理员)最有意义的位置。引用 #httpd 上的 IRC 机器人:
所有配置文件都是平等创建的。将指令放入哪个配置文件并不重要。重要的是您是否将其放入适当的部分(例如 或 )。将指令放在对您有意义的地方,以及您下次能够找到它们的地方。
2)可能将其放在虚拟主机中(即,在 000-default 中,在块内,因为这可能是最有意义的地方,并且将适用于您想要的范围。
问题 2:将“AllowOverride All”更改为“AllowOverride None”。此外,永远不要像示例中那样设置“AllowOverride All”。它表示“为全部的文件系统,这显然不是您想要的,无论是出于安全性还是性能的原因。因此,即使您使用 .htaccess 文件进行某些操作,也应在 中将其设置为“无”。请记住,指的是实际的文件系统目录“/”,而不是您的 Web 文档根目录。
问题 3:一旦您设置了“AllowOverride None”,.htaccess 文件将被完全忽略。因此,所有指令都应移至主配置。但是,我不太清楚您在问题 3 中问的是什么。您能详细说明一下吗?