Запуск Apache / 2.4.7.
Кажется, у меня возникли проблемы с принудительным использованием префикса www
для одного из моих доменов SSL.
следующие шаблоны должны перенаправлять на: https://www.foo.com
foo.com
www.foo.com
http://foo.com
http: // www .foo.com
https://foo.com
Стоит упомянуть, я также хочу сохранить любой URI, который мог быть запрошен, например. foo.com/bar
=> https://www.foo.com/bar
Итак, вот актуальный текущий код в моем foo.com.conf
файл.
<VirtualHost *:80>
ServerName foo.com
ServerAlias *.foo.com
RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>
<VirtualHost *:443>
ServerName foo.com
ServerAlias *.foo.com
</VirtualHost>
Я был бы признателен за некоторые рекомендации здесь.
Фрагмент кода Джоны работал хорошо, но в итоге я использовал mod_macro , чтобы избежать повторяющегося кода.
<Macro ServerAliasesRedirect>
ServerAlias foo.com
ServerAlias *.foo.com
RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</Macro>
<Macro SSL>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/foo.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/foo.com.key
SSLCertificateChainFile /etc/apache2/ssl/foo.com.ca-bundle
</Macro>
<VirtualHost *:80>
Use ServerAliasesRedirect
</VirtualHost>
<VirtualHost *:443>
Use SSL
ServerName www.foo.com
# ...directory stuff and so on...
</VirtualHost>
<VirtualHost *:443>
Use SSL
Use ServerAliasesRedirect
</VirtualHost>
Избавьтесь от директивы ServerName
в виртуальных хостах порта 80 и порта 443.
Добавьте аналогичную директиву соответствия перенаправления, как в виртуальном хосте порта 80, в порт 443 виртуального хоста.
Сделайте другой порт 443 виртуальным хостом с помощью
ServerName www.foo.com
Убедитесь, что этот виртуальный хост появляется и обрабатывается перед другим виртуальным хостом порта 443.
Этот виртуальный хост - это то место, куда пользователи попадают после перенаправления. Так что укажите здесь другую подходящую конфигурацию.
Пример:
<VirtualHost *:80>
ServerAlias foo.com
ServerAlias *.foo.com
RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>
<VirtualHost *:443>
ServerName www.foo.com
# various directives as appropriate for live service to users
# important to place this before the wildcard VirtualHost below
# which will match all subdomains
# not matched by a preceding VirtualHost
</VirtualHost>
<VirtualHost *:443>
ServerAlias foo.com
ServerAlias *.foo.com
RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>