Пусть Apache будет обслуживать статический контент, а не перенаправлять его на Plone (ресурс ++)

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

RewriteEngine On
RewriteRule  ^/(.*) http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/Plone/VirtualHostRoot/$1 [L,P

Это статическое содержимое не все в одном месте. Однако Plone предоставляет стандартный способ именования каталогов ресурсов; например, "браузер" mybrowser из myproduct может иметь каталог файловой системы static:

/my/plone/root/Products/myproduct/mybrowser/static/

который будет опубликован как /++resource++mybrowser-static,

Нет никакого смысла в том, чтобы Plone обслуживал статические файлы, поэтому я хотел бы предотвратить переписывание определенных запросов, а не их непосредственное обслуживание.

Вот что я попробовал:

# in Plone: /++resource++mybrowser-static
<Directory /my/plone/root/Products/myproduct/mybrowser/static>
    Options All
    AllowOverride All
    Require all granted
</Directory>
Alias /static                       /my/plone/root/Products/myproduct/mybrowser/static
Alias /++resource++mybrowser-static /my/plone/root/Products/myproduct/mybrowser/static
LogLevel alert rewrite:trace3 alias:trace3
...
RewriteCond %{REQUEST_URI} !^/++resource++mybrowser-static
RewriteCond %{REQUEST_URI} !^/static/
RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/Plone/VirtualHostRoot/$1 [L,P]

Таким образом, в настоящее время у меня есть два псевдонима для одного каталога; ++ версия - более общий подход, поэтому я бы хотел, чтобы она работала.

Тем не менее, когда я прошу http://my.site.com/static/logo.png, это работает:

... [rewrite:trace2] ... init rewrite engine with requested uri /static/logo.png
... [rewrite:trace3] ... applying pattern '^/(.*)' to uri '/static/logo.png'
... [rewrite:trace1] ... pass through /static/logo.png

... в то время как .../++resource++mybrowser-static/ версия не (то есть это подано Zope):

... [rewrite:trace2] ... init rewrite engine with requested uri /++resource++mybrowser-static/logo.png
... [rewrite:trace3] ... applying pattern '^/myunitracc([/?].+)\\?$' to uri '/++resource++mybrowser-static/logo.png'
... [rewrite:trace3] ... applying pattern '^/(.*)' to uri '/++resource++mybrowser-static/logo.png'
... [rewrite:trace2] ... rewrite '/++resource++mybrowser-static/logo.png' -> 'http://localhost:8080/VirtualHostBase/http/my.site.com:80/Plone/VirtualHostRoot/++resource++mybrowser-static/logo.png'
... [rewrite:trace2] ... forcing proxy-throughput with http://localhost:8080/VirtualHostBase/http/my.site.com:80/Plone/VirtualHostRoot/++resource++mybrowser-static/logo.png
... [rewrite:trace1] ... go-ahead with proxy request proxy:http://localhost:8080/VirtualHostBase/http/my.site.com:80/Plone/VirtualHostRoot/++resource++mybrowser-static/logo.png [OK]

Я хотел бы пройти через вместо принудительной пропускной способности прокси в обоих случаях.

Нужно ли цитировать + персонажи как-то? Я уже пытался префикс их всех с помощью обратной косой черты, или заменить их на %2B, но это, казалось, не имело никакого значения.

Я тоже посмотрел здесь, но ProxyPass <url> ! у меня не работает (пока?), может быть из-за RewriteRule вместо ProxyPass / ProxypassReverse (механизм виртуального хоста Zope сам заботится о "обратной" части).

Спасибо за любую помощь!

1 ответ

Решение

Я нашел способ заставить это работать.

После увеличения уровня журнала:

LogLevel alert rewrite:trace5

... Я получил дополнительную информацию о сопоставлении шаблонов (на уровне 4).

Если заключить в квадратные скобки, буквальное + персонажи работают:

RewriteCond !^/[+][+]resource[+][+]myproduct-static/
RewriteRule ...    

Для псевдонима это не обязательно:

Alias /++resource++myproduct-static /my/zope/root/Products/myproduct/static
Другие вопросы по тегам