Избавляемся от /OpenCms/OpenCms в OpenCms

Те, кто хоть раз использовал в работе OpenCms знают, что после установки по официальному сценарию (под Tomcat в standalone режиме как отдельное приложение в контексте OpenCms) система доступна по адресу http://localhost:8080/OpenCms/OpenCms. Не знаю как остальных, но мне в этом не нравятся две вещи:

  1. Статические ресурсы, как то картинки, таблицы стилей, java-скрипты отдаются пользователю Tomcat-ом, что влечет к некоторым накладным расходам, от которых вполне дешево можно избавиться, отдав весь статический контент на откуп apache.
  2. Наличие в адресе 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, иначе он просто не запустится.

 

Leave a reply