Apache 重写导致两个请求
Apache rewrite causes two requests
我注意到,当我们请求静态资源时,即像这样:
获取 /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/
...
<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)。
这里有什么最好的典型解决方案?
如果您的 %{SERVER_NAME}
符合规则
RewriteRule ^/MYAPP/css/(.*)$ https://%{SERVER_NAME}/css/
与主机名不同,那么 Apache 将进行外部重定向,并写入日志行,并且将提供一个新请求。可能会发生很多事情,具体取决于您的设置,但我猜现在您应该尝试这样的规则:
RewriteRule ^/MYAPP/css/(.*)$ /css/
关于 RewriteRule 的 Apache 文档中描述了我认为可能是问题的地方,他们描述了 "Substitution" 段落 "Absolute URL".
如果您还需要 https 的规则,您可以使用环境变量 %{HTTP_HOST}
而不是 %{SERVER_NAME}
。
我注意到,当我们请求静态资源时,即像这样: 获取 /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/
...
<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)。 这里有什么最好的典型解决方案?
如果您的 %{SERVER_NAME}
符合规则
RewriteRule ^/MYAPP/css/(.*)$ https://%{SERVER_NAME}/css/
与主机名不同,那么 Apache 将进行外部重定向,并写入日志行,并且将提供一个新请求。可能会发生很多事情,具体取决于您的设置,但我猜现在您应该尝试这样的规则:
RewriteRule ^/MYAPP/css/(.*)$ /css/
关于 RewriteRule 的 Apache 文档中描述了我认为可能是问题的地方,他们描述了 "Substitution" 段落 "Absolute URL".
如果您还需要 https 的规则,您可以使用环境变量 %{HTTP_HOST}
而不是 %{SERVER_NAME}
。