Apache重写导致两个请求

时间:2015-07-20 15:48:45

标签: apache tomcat webserver httpd.conf

我注意到,当我们请求静态资源时,例如: GET /MYAPP/css/navbar.css

它在apache日志中显示为两行:

  

[20 / Jul / 2015:11:39:07 -0400] 10.72.123.1 TLSv1 AES256-SHA" GET   /MYAPP/css/navbar.css HTTP / 1.1" 302 224 0/159

     

[20 / Jul / 2015:11:39:07 -0400] 10.72.123.1 TLSv1 AES256-SHA" GET   /css/navbar.css HTTP / 1.1" 200 2846 0/364

这与配置中设置的当前重写规则有关:

RewriteRule ^/MYAPP/css/(.*)$ https://%{SERVER_NAME}/css/$1
...
<Directory "/var/www/myapp-static">
  Options None
  AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

我是对的,这里有什么问题吗?对静态文件的每个请求都会导致两个调用而不是一个调用,它是否会以任何方式降低apache的整体性能?什么是处理这个问题的最佳做法? 作为我看到的解决方案之一,我们可以直接使用静态资源链接作为/css/navbar.css,而不是通过/MYAPP/css/navbar.css。但是如果它运行时没有apache,那么这将使应用程序失败(因为我们确实有一些环境没有apache)。 什么是最好的典型解决方案?

1 个答案:

答案 0 :(得分:1)

如果您在规则中%{SERVER_NAME}

RewriteRule ^/MYAPP/css/(.*)$ https://%{SERVER_NAME}/css/$1

与主机名不同,然后Apache将进行外部重定向,并写入一个日志行,并提供一个新请求。很多事情都可能发生,取决于你的设置,但我现在的猜测是你应该尝试像这样的规则:

RewriteRule ^/MYAPP/css/(.*)$ /css/$1

我认为这个问题可以在Apache文档中描述RewriteRule,在那里他们描述&#34; Substitution&#34;,paragraph&#34; Absolute URL&#34;。

如果您还需要针对https的规则,则可以使用环境变量%{HTTP_HOST}代替%{SERVER_NAME}