httpdconfiguration中的mod_rewrite规则

如何以及在哪里将我的mod_rewrite规则放在httpdconfiguration中,以便在启动时只parsing一次,而不是每次读取web目录中的文件。

附加信息:

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

谢谢

我不确定是否理解这个问题,但是如果问题是“我现在已经在.htaccess文件中重写了规则,并且想把它们放在整个Apacheconfiguration中。 您必须在apacheconfiguration中添加<Directory /path/to/directory/where/htaccess/is>指令,并将.htaccess文件的内容放入其中。

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

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

答案都在这里 – 它们并不是全部捆绑在一起。

由于memnoch_proxy指出:

“.htaccess文件中修改的规则是在每个请求中读取的,/etc/httpd/httpd.conf和/etc/httpd/conf.d/*不是。我使用service httpd reload触发对这些文件的新的更改,它发送一个SIGUSR1让工人重温一下“。

所以这听起来像你使用.htaccess文件来定义适用于您的网站和/或文件夹结构的重写规则。

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

这些规则的位置取决于系统pipe理员如何布置系统; 在红帽企业Linux环境下,我build议你把它们放在一个名为的文件中

 重写,rules.conf 

位于

  /etc/httpd/conf.d 

在一个默认的Apache版本的系统上,你可能需要把它们放在最后

  httpd.conf文件 

文件位于

 在/ usr /本地/ Apache / conf目录 

在你的httpd.conf文件中添加“include modrewrite.conf”之类的东西。 然后在moderewrite.conf文件中添加重写规则。

还要确保你已经包含mod_rewrite模块,如果没有编译。

每次访问规则涉及的服务器上的资源时,都会处理RewriteRules。 不pipe规则的位置在何处,每次都会被parsing。

然而,如果你的意思是你不喜欢在每个资源请求中从磁盘读取.htaccess的开销,那么radius的答案就是你想要的,附加了明显的指令,然后在放置其内容之后移除.htaccess文件在主要的apacheconfiguration文件中。