2015-07-20 1 views
0

я заметил, что, когда мы спрашиваем статический ресурс, то есть, как это: GET /MYAPP/css/navbar.cssApache переписывают вызывает два запроса

появляется в апача бревен в виде двух линий:

[20/июль/2015: 11: 39: 07 -0400] 10.72.123.1 TLSv1 AES256-ША "GET /MYAPP/css/navbar.css HTTP/1.1" 302 224 0/159

[20/Июль/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> 

Правильно ли я что-то здесь не так? Каждый запрос к статическому файлу приводит к двум вызовам вместо одного, уменьшает ли он весь perforamnce в любом случае? Какова наилучшая практика для этого? Как одно из решений, которое я вижу, мы можем использовать ссылки на статические ресурсы как /css/navbar.css напрямую, а не через /MYAPP/css/navbar.css. Но это приведет к отказу приложения, если оно будет работать без apache (поскольку у нас есть некоторые среды, в которых нет Apache). Какое лучшее и типичное решение здесь?

+0

Является ли значение% {SERVER_NAME} отличным от имени хоста? – Zimmi

+0

@ Zimmi Я не знаю, чтобы быть честным .. как я могу проверить значение SERVER_NAME? Это имеет какое-то отношение к свойству ServerName, определенному внутри ? – javagirl

+0

@ Zimmi на самом деле это должно быть! ServerName в VirtualHost определяется как loadbalanced имя домена, а хост может быть другим. Значит, они должны быть одинаковыми? – javagirl

ответ

1

Если %{SERVER_NAME} внутри правила

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

отличается от имени хоста, то Apache будет сделать внешний редирект, и написать строку журнала, и новый запрос приходит, что будет подан. Многие может случиться и зависят от вашей установки, но я думаю, что теперь вы должны дать попробовать правилу, как этот:

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

То, что я думаю, что может быть проблема описана в документе Apache о RewriteRule , где они описывают «Замещение», абзац «Абсолютный URL».

Если вам нужно правило также для https, вы можете использовать переменную окружения %{HTTP_HOST} вместо %{SERVER_NAME}.

+0

Большое спасибо, дайте ему повод – javagirl

+0

спасибо за это, имея правило, как вы предлагали, исправляет две записи в файле журнала. Тем не менее, он чувствует, что настройка все еще не идеальна. Когда я получаю доступ к файлу вроде: https: // /MYAPP/css/navbar.css, он занимает в два раза больше времени, чем https: // /css/navbar.css - почему? Обратите внимание, что у меня также есть модуль mod_jk, который имеет эту точку монтирования: JKMount/MYAPP/* MYAPP – javagirl

+0

@javagirl, чтобы знать, что это решило проблему с двумя строками. Я вполне уверен, что влияние производительности, о котором вы говорите, не связано с этим переписанием. Тем более, что у вас есть это в http conf file, поэтому это (простое) регулярное выражение получается скомпилировано один раз при запуске сервера (что, конечно же, не относится к htaccess). У меня нет знаний с mod_jk, я не смогу помочь вам в этом. Может быть, это может быть по другому вопросу, теперь, когда это перенаправление очищено? – Zimmi

 Смежные вопросы

  • Нет связанных вопросов^_^