httpd 配置中的 mod_rewrite 规则

httpd 配置中的 mod_rewrite 规则

我该如何以及在何处将 mod_rewrite 规则放在 httpd 配置中,以便它们仅在启动时解析一次,而不是每次读取我的 web 目录中的文件时都解析一次。

附加信息:

  • 假设所有脚本都在 .htaccess 文件中运行
  • 运行 Apache 2.0.52 的 RHEL4
  • 机器上有多个子域/域

谢谢

答案1

我不确定是否理解了这个问题,但如果问题是“我目前在 .htaccess 文件中有重写规则,并想将它们放入整个 apache 配置中。” 您必须<Directory /path/to/directory/where/htaccess/is>在 apache 配置中添加一个指令,并将 .htaccess 文件的内容放入其中。

如果 .htaccess 位于 /srv/web/site1/folder1/ 中,则在 apache 配置文件中添加以下内容

<Directory /srv/web/site1/folder1>
Paste content of .htaccess here
</Directory>

答案2

答案都在这里 - 只是没有全部捆绑在一起。

正如 memnoch_proxy 所述:

“每次请求时都会读取 .htaccess 文件中修改的规则。 /etc/httpd/httpd.conf 和 /etc/httpd/conf.d/* 则不会。我使用服务 httpd reload 触发对这些文件的新更改,它会向工作人员发送 SIGUSR1 以正常重启。”

因此在我看来您正在使用 .htaccess 文件来定义适用于您的网站和/或文件夹结构的重写规则。

为了防止每次访问目录或页面时重新读取和重新解释规则,需要将规则放在您网站的中央 Apache 配置文件中。

这些规则的位置取决于系统管理员如何布局系统;在 Red Hat Enterprise Linux 环境中,我建议您将它们放在名为

重写规则.conf
位于
/etc/httpd/conf.d

在具有 Apache 默认版本的系统上,您可能必须将这些放在

httpd配置文件
文件位于
在 /usr/local/apache/conf/

答案3

在您的 httpd.conf 文件中,添加类似“include modrewrite.conf”的内容。然后在 moderewrite.conf 文件中,添加重写规则。

此外,如果未编译,请确保已包含 mod_rewrite 模块。

答案4

每次访问服务器上与规则相关的资源时,都会处理 RewriteRules。无论规则放在何处,每次都会对其进行解析。

但是,如果您的意思是您不喜欢在每次资源请求时从磁盘读取 .htaccess 的开销,那么 radius 的答案就是您想要的,另外还有一个明显的指令,即在将其内容放入主 apache 配置文件中后删除 .htaccess 文件。

相关内容