我注意到,当我们请求静态资源时,例如: 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)。 什么是最好的典型解决方案?
答案 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}
。