我正在一个专门的服务器(Debian)上运行Joomla的网站,我已经读过将.htaccess规则移动到apache2configuration文件可能会导致很好的性能改进( Apache HTTP Server Tutorial:.htaccess文件 )。
/ etc / apache2中的主要configuration文件:apache2.conf
在apache2.conf中,有一些我能够理解的指令:
AccessFileName .htaccess
和
Include sites-enabled/
服务器只托pipe一个网站。 在启用网站的情况下,还有另一个文件包含其他指令: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规则包含到apacheconfiguration文件中,但是我主要有三个疑问:
1)我应该在哪里插入htaccess规则,在apache2.conf或在000默认?
2)性能改进是由于主目录和子目录中的ata查找减less了htaccess文件,我应该修改哪个指令?
AccessFileName .htaccess
要么
AllowOverride All
或两者? 而关于AllowOverride All,其中Directory-000在默认的?
3)禁用AllowOverride All后,即使使用DocumentRoot / var / www指令,是否也应包含/ usr / share / phpmyadmin的htaccess指令?
回答问题1有两个答案:
1)没关系。 这些文件在启动时会合并到一个内存configuration中。 把configuration放在最有意义的地方,服务器pipe理员。 引用#httpd上的IRC bot:
所有的configuration文件都是相同的。 不pipe你把指令放在哪个configuration文件中,重要的是你是否把它放在适当的部分(或者,例如)。 把指令放在某个对你有意义的地方,下一次你能find它们的地方。
2)可能把它放在虚拟主机上,(也就是说,在000内默认,在块内,因为这可能是最有意义的,并将适用于你想要的范围。
问题2:将“AllowOverride All”更改为“AllowOverride None”。 另外,永远不要像在你的例子中那样设置'AllowOverride All'。 这就是说“打开整个文件系统的.htaccess文件,这显然不是你想要的,因为安全和性能的原因,所以即使你使用.htaccess文件的东西,它仍然应该被设置为'无“。记住,指的是实际的文件系统目录”/“,而不是你的网页文档根目录。
问题3:一旦设置了“AllowOverride None”,.htaccess文件将被完全忽略。 因此任何指令都应该移到主configuration中。 但是,我并不完全清楚你在问什么问题3.你能详细说明吗?