已安装Apache模块,但似乎没有在Ubuntu中加载

时间:2010-06-09 21:23:05

标签: apache mod-rewrite ubuntu module

我对Linux很陌生。昨天设置了VPS,安装了Apache2,PHP5和MySQL。

当我apache2 -l时,我得到了这个:

Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  prefork.c
  http_core.c
  mod_so.c

当我sudo a2enmod rewrite时,我得到了这个:

Module rewrite already enabled

rewrite.load位于/etc/apache2/mods-enabled

任何人都可以说出错了吗?

1 个答案:

答案 0 :(得分:3)

这真的属于ServerFault,但由于它最终可能会被迁移,所以我会继续说,编译成Apache的模块和动态加载的模块之间存在差异。

Apache能够以两种不同的方式加载模块。 “更简单”的方法是将模块静态编译到服务器中。这意味着可执行文件apache2字面上包含模块的代码。这种方法的优点是模块始终可用,Apache不需要做任何特殊的操作来访问其代码,但另一方面,如果要添加,删除或更新静态编译的模块,你必须重新编译所有的Apache。另外,静态编译的模块越多,可执行文件就越大。由于这些原因,该列表通常只包含一些最重要的模块,基本上是Apache运行所需的最小模块。这几个模块是您在运行apache2 -l时看到的列表中显示的模块。

Apache使用的所有其他模块(包括mod_rewrite)都是动态加载的。也就是说,它们的代码存储为单独的文件,Apache在启动后找到并读入。这消除了静态编译方法的缺点:由于模块存储在单独的文件中,如果要添加/删除/更改一个,您只需要重新启动服务器,而不是重新编译它。您可以通过将LoadModule指令放在Apache配置文件中来告诉Apache要加载哪些模块。这基本上是a2enmod的作用:它向配置文件添加LoadModule指令。 (实际上它将存根配置文件符号链接到由主配置提供的目录中)

如果要查看已加载模块的完整列表,包括动态加载的模块,可以运行

apache2 -M

但是,您必须确保以与Ubuntu的init脚本相同的方式运行Apache。系统在启动Apache之前读取配置文件或其他东西是很常见的,如果你不这样做,它可能会改变加载的模块集。