<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType application/javascript "access 1 week"
ExpiresByType text/css "access 1 week"
</IfModule>
我在 .htaccess 文件中使用了很多这些标签来设置缓存、deflate、Accept-encoding 标头等。我注意到,如果我删除打开和关闭标签,一切都会继续正常工作。这些标签有什么用?只要一切似乎都正常工作,删除它们是否安全?
答案1
<IfModule>
只是一个测试条件“是否由 apache httpd 加载的指定模块”(在您的示例中为 mod_expires)的指令。它允许人们针对不同的安装生成基于条件的配置,其中某些模块可能存在或不存在。
最佳做法是,除非必要,否则不要使用它。理想情况下,你应该知道您的 Web 服务器加载哪些模块以及哪些配置指令可用。
您可以随时检查 Web 服务器正在加载的模块apachectl -M
,并且apachectl configtest
在重新启动 Web 服务器之前,应该显示您在未加载相关模块的情况下使用过的任何指令。
答案2
它包含仅在服务器中存在特定模块时才应用的指令。模块必须在服务器中静态编译,或者必须动态编译,并且其LoadModule
行必须位于配置文件的前面。仅当您需要配置文件无论是否安装了某些模块都能正常工作时才应使用此指令。它不应用于包含您希望始终工作的指令,因为它可能会隐藏有关缺少模块的有用错误消息。
在以下示例中,MimeMagicFile
仅当 mod_mime_magic 可用时才会应用该指令。
<IfModule mod_mime_magic.c>
MimeMagicFile "conf/magic"
</IfModule>