У меня есть сайт на основе 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 сам берет на себя "обратную" часть).
Спасибо за любую помощь!
Я нашел способ заставить его работать.
После повышения уровня журнала:
LogLevel alert rewrite:trace5
... Я получил дополнительную информацию о сопоставлении шаблонов (на уровне 4).
В квадратных скобках буквальный +
персонажи работают:
RewriteCond !^/[+][+]resource[+][+]myproduct-static/
RewriteRule ...
Для псевдонима это не обязательно:
Alias /++resource++myproduct-static /my/zope/root/Products/myproduct/static