Как я могу реализовать глобальный RewriteCond / RewriteRule в Apache, который относится ко всем виртуальным хостам?

вам просто нужно раскомментировать часть кода в conf / web.xml (Tomcat server web.xml), которая фильтрует весь запрос и конвертирует в UTF-8.

 <!-- A filter that sets character encoding that is used to decode -->
 <!-- parameters in a POST request -->
 <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
 </filter>

  <!-- The mapping for the Set Character Encoding Filter -->
  <filter-mapping>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
  </filter-mapping>

, вот и все. работать отлично в tomcat

20
задан hourback 5 December 2008 в 17:23
поделиться

3 ответа

Я никогда не тестировал его, таким образом, это не могло бы работать, но я попытаюсь добавить include директива во всех виртуальных блоках хоста в единственный файл. Необходимо было бы изменить каждый виртуальный блок конфигурации хоста однажды, но после этого, у Вас должно быть центральное место, от которого можно внести изменения. YMMV.

5
ответ дан 29 November 2019 в 23:48
поделиться

Похоже, самое простое возможное решение - добавить

RewriteOptions inherit

в каждую директиву VirtualHost. Это по крайней мере намного проще, чем возиться с файлами .htaccess. Apache довольно ясно понимает тот факт, что

по умолчанию конфигурации перезаписи не передается по наследству. Это означает, что вы необходимо включить RewriteEngine директива для каждого виртуального хоста в который вы хотите использовать. ( http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html )

и, по-видимому, способ изменить значение по умолчанию - через RewriteOptions в дочернем (виртуальном хосте или директоре), поэтому вы должны сделать что-то в каждом ребенке.

10
ответ дан 29 November 2019 в 23:48
поделиться

Если вы пытаетесь переписать что-то только в доменной части имени, например, исправить распространенную ошибку в написании, вам даже не нужна опция 'inherit'. Я настроил виртуальный хост без имени, чтобы отлавливать все недействительные имена хостов и правильно их переписывать перед перенаправлением.

Поскольку здесь используются перенаправления, соответствующий виртуальный хост будет найден после применения переписывания.

Options +Indexes +FollowSymLinks
RewriteEngine on
# If it begins with only domain.com, prepend www and send to www.domain.com
RewriteCond %{HTTP_HOST} ^domain [NC]
RewriteRule ^(.*) http://www.domain.com$1 [L,R=301]

# Correct misspelling in the domain name, applies to any VirtualHost in the domain
# Requires a subdomain, i.e. (serviceXXX.)domain.com, or the prepended www. from above
RewriteCond %{HTTP_HOST} ^([^.]+\.)dommmmmain\.com\.?(:[0-9]*)?$ [NC]
RewriteRule ^(.*) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+\.)?domain.com(.*) http://$1domain.com$2 [L,R=301]

# No-name virtual host to catch all invalid hostnames and mod_rewrite and redirect them
<VirtualHost *>
    RewriteEngine on
    RewriteOptions inherit
</VirtualHost>
2
ответ дан 29 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: