如何使用Apache中的现有文件只设置HTTP标头的conf
我服务使用Apache的文件和应用程序的请求,App请求使用RewriteRule
发送模式相匹配,以我的应用程序服务器的网址。如何使用Apache中的现有文件只设置HTTP标头的conf
我希望设置一个特定的HTTP报头(缓存控制)仅适用于不从上述匹配RewriteConds
请求。有没有办法做到这一点,而不使用.htaccess
文件?
我试过在RewriteRule
(它使用L标志)之后放置Header set
指令,但标题仍然得到应用。
你真的应该张贴您的RewriteRules。
有肯定是我们可以做到这一点。首先我在想的是设置一个环境变量来匹配rewriteRules(所以一组rewriteCond,反转以前的),使用[E=myvar:myvalue]
标签;并使用Header指令[env=myvar]
的最后一个可用参数来条件设置此Header。
然后你说:
有没有这样做,没有使用.htaccess文件的方法吗?
那么,RewriteRules和.htaccess文件是松散相关的。你在的.htaccess设置任何真的适合在<Directory>
指令更好地与您的虚拟主机,以防止来自Apache的IO操作的looooot一个不错的AllowOverride None
,试图在每个请求读了一堆的.htaccess文件。
第二件事,你说:
我试过把页眉设置指令重写规则的 (它使用了L位)
好后的[L]
标志防止几个的RewriteRules一个接一个地应用相同的目录,所以他们现在不会被链接到direclty。但事实上,在你的rewriteRule结束之后([L]),rewriteRule的输出将重新应用到目录中,以查看是否仍应用任何RewriteRule(也许是同一个)。
这就是为什么我们有时会看到太多的内部重定向消息。
要想看到它发生的唯一方法是在VirtualHost上使用RewriteLog /a/file.log
和RewriteLogLevel 9
(有时会出现很多惊喜,有些规则有时会伴随大量递归)。
一个很好的的RewriteCond已知的是:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
这种的RewriteCond任何前缀规则将仅应用于您进入该目录最早出现的时候,你的规则结束后(也许用[L]或者因为没有更多规则),结果将在直接规则中重新测试,但env变量REDIRECT_STATUS不为空。如果设置了此env变量,此条件会告诉mod-rewrite以避免该规则。