мы не можем изменить настройки сервера и, таким образом, единственный способ сохранить правила перезаписи - это htaccess.
Вы не можете сделать это в .htaccess
, так как вы не можетеиспользуйте директиву Include
в файлах .htaccess
.Нет другого способа включения файла конфигурации.И единственный способ включить это условно - с помощью блока <If>
.
Вы можете потенциально иметь все директивы внутри блока <If>
вместо использования флага [S=1000]
.Однако это не без серьезных предостережений.Пока выражение <If>
обрабатывается рано, содержимое блока <If>
объединяется позднее («последний») в запросе.Фактически, он, кажется, объединен очень поздно после того, как запрос уже был сопоставлен с файловой системой.Это означает, что директивы RewriteRule
соответствуют пути разрешенной файловой системы, а не запрошенному URL-пути!Таким образом, это необходимо учитывать в любых директивах RewriteRule
или перейти на использование mod_alias Redirect
или RedirectMatch
для внешних перенаправлений, которые всегда действуют на запрошенный URL.
Вы можете потенциально сделать это в конфигурации сервера (используйте директиву Include
внутри блока <If>
).Но применяется то же самое предостережение, как упомянуто выше - блок <If>
объединен очень поздно .
Обратите внимание, однако, ваш синтаксис не совсем корректен.Если вы хотите сопоставить регулярное выражение, то у вас отсутствуют косые черты вокруг регулярного выражения.Он должен выглядеть следующим образом:
<If "%{HTTP_HOST} =~ /^www\.example\.com$/">
Include conf/com.rewriterules.conf
</If>
Или использовать более простое сравнение строк / равенств:
<If "%{HTTP_HOST} == 'www.example.com'">
:
Однако вместо использования блока <If>
предпочтительнее иметь отдельный<VirtualHost>
для каждого домена и в каждом vHost вы можете просто Include
нужный файл.Никаких предостережений.
Ничего особенного, но ... если все ваши "правила перезаписи" являются внешними перенаправлениями (как в вашем примере) для запросов, которые в противном случае привели бы к 404 (т. Е. Онине существует), тогда вам не следует делать все эти перенаправления в конфигурации Apache для начала (.htaccess
или конфигурации сервера).
Они должны быть в логике вашего приложения и обрабатываться только "поздно"когда ваше приложение определило, что в противном случае это приведет к 404. Это расставит приоритеты по нормальному трафику сайта, а не по приоритетам перенаправлений.С перенаправлениями в конфигурации Apache они обрабатываются при каждом отдельном запросе - это часто не нужно.
RewriteRule ^foo https://www.example.com/bar [R=301,L]
:
RewriteRule ^foo https://www.example.co.uk/bar [R=301,L]
Может быть, просто ваш пример кода, но вам не нужноуказать абсолютный URL-адрес в подстановке RewriteRule
для внешних перенаправлений.это может быть root-относительно: /bar
.