我该如何以及在何处将 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 文件。