Избавляемся от /OpenCms/OpenCms в OpenCms
Те, кто хоть раз использовал в работе OpenCms знают, что после установки по официальному сценарию (под Tomcat в standalone режиме как отдельное приложение в контексте OpenCms) система доступна по адресу http://localhost:8080/OpenCms/OpenCms. Не знаю как остальных, но мне в этом не нравятся две вещи:
- Статические ресурсы, как то картинки, таблицы стилей, java-скрипты отдаются пользователю Tomcat-ом, что влечет к некоторым накладным расходам, от которых вполне дешево можно избавиться, отдав весь статический контент на откуп apache.
- Наличие в адресе OpenCms, да к тому же в таком количестве, по-моему, не может не пугать.
Итак, постараемся избавиться от этих недостатков.
Во-первых, есть официальный способ их устранения. Но он мне не нравится тем, что используется в нем mod_proxy, хотя для интеграции apache и Tomcat существует более правильный путь.
Во-вторых, там же есть ссылка и на правильный вариант.
Единственное, что могу еще добавить, так это то, что для
RewriteRule .* /${WEBAPP_NAME}/OpenCms/handle404?exporturi=%{REQUEST_URI}&%{QUERY_STRING} [P]
вместо опции [P] (force proxy) необходимо выставить [R] (force redirect). Так же можно избавиться от повторного разбора REQUEST_URI, заменив
RewriteCond %{REQUEST_URI} !^/${WEBAPP_NAME}/resources/.*$
RewriteCond %{REQUEST_URI} !^/export/.*$
на
RewriteCond %{ENV:no-jk} !1
Кому надо, выкладываю измененные файлы конфигурации tomcat, apache и OpenCMS
Сам я прдпочитаю использовать виртуальные хосты для каждого проекта, и OpenCms - в качестве корневого контекста. Для этого необходимо переименовать opencms.war и opencms в ROOT.war и ROOT соответственно, немного изменить конфигурационные файлы, заменив везде localhost на имя виртуального хоста, и заменив настройки фиртуального хоста на следующие
<VirtualHost *:80>
ServerName test.tst
DocumentRoot "c:/wwwroot/ROOT/"
# If the requested <acronym title="Uniform Resource Identifier">URI</acronym> is located in the resources folder, do not forward the request
SetEnvIfNoCase Request_URI ^/resources/.*$ no-jk
# If the requested <acronym title="Uniform Resource Identifier">URI</acronym> is static content do not forward the request
SetEnvIfNoCase Request_URI ^/export/.*$ no-jk
RewriteEngine on
# If the requested <acronym title="Uniform Resource Identifier">URI</acronym> is NOT located in the resources folder.
# Prepend an /OpenCms to everything that does not already starts with it
# and force the result to be handled by the next <acronym title="Uniform Resource Identifier">URI</acronym>-handler ([PT]) (JkMount in this case)
RewriteCond %{ENV:no-jk} !1
RewriteRule !^/opencms/(.*)$ /opencms%{REQUEST_URI} [PT]
# These are the settings for static export. If the requested resource is not already
# statically exported create a new request to the opencms404 handler. This has to be
# a new request, because the current would net get through mod_jk because of the "no-jk" var.
RewriteCond %{REQUEST_URI} ^/export/.*$
RewriteCond "%{DOCUMENT_ROOT}%{REQUEST_FILENAME}" !-f
RewriteCond "%{DOCUMENT_ROOT}%{REQUEST_FILENAME}/index_export.html" !-f
RewriteRule .* /opencms/handle404?exporturi=%{REQUEST_URI}&%{QUERY_STRING} [R]
JkMount /* ajp13-5
</VirtualHost>
P.S. Все это необходимо проделать уже после того, как отработает мастер установки OpenCMS, иначе он просто не запустится.
Изменен
