
Я читал темы SO по этому поводу. Однако они применимы только к отдельным хостам.
Я хотел бы иметь единое правило для всех серверов для текущих и будущих доменов.
По сути, я хочу удалить www из всех запросов и оставить доступным только доменное имя.
Apache также обслуживает HTTPS, так как же применить это ко всем?
Спасибо!
http://www.example.com >> http://example.com
https://www.example.com >> https://example.com
Мария
решение1
То, что вы описываете, (по-видимому) невозможно при использовании mod_rewrite
, в определенной степени.
Конфигурации из нескольких «уровней» не суммируются mod_rewrite
, поэтому набор правил, определенный в конфигурации основного сервера, не будет автоматически импортироваться и применяться к запросу, делегированному <VirtualHost>
.
Однако, если предположить, что вам в любом случае придется назначить правило <VirtualHost>
в какой-то момент, и вы не планируете вводить какие-либо другие правила в <VirtualHost>
текст (если они есть в разделе .htaccess
или <Directory>
, это было бы нормально), вы можете поэкспериментировать со следующим.
В основной конфигурации мы возьмем мойответ на этот связанный вопроси применить его:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
Затем в каждом из наших <VirtualHost>
разделов мы можем «импортировать» его с помощьюRewriteOptions
директива:
RewriteEngine On
RewriteOptions inherit
Конечно, в качестве альтернативы вы можете просто скопировать набор правил для каждого из них <VirtualHost>
целиком, но в этом случае соответствующий набор правил будет храниться в одном месте.
Обратите внимание, что причина, по которой я предлагаю не вводить дополнительные правила напрямую <VirtualHost>
в этом случае, заключается в том, что унаследованные правила включеныпослевсе, что вы определили на текущем уровне конфигурации, может иметь непреднамеренные побочные эффекты.