У меня есть ssl-код подстановки для моего домена. У меня много поддоменов, каждый со своей страницей по умолчанию.
www.domain.com/main.html [/home/domain/main.html]
try.domain.com/free.php [/home/domain/try/free.php]
new.domain.com/signup.php [/home/domain/new/signup.php]
и т.д
Я хочу написать .htaccess так, чтобы:
Я хочу сделать все это в одном файле htaccess /home/domain/.htacces и не иметь файлов htaccess в каждой папке.
ИМХО, вы уже идете в неправильном направлении с намерением создать .htaccess
файл, который является моей любимой головной болью, цитируется из руководство по .htaccess файлы:
Вам следует избегать использования
.htaccess
файлы полностью если у вас есть доступ к конфигурации главного сервера httpd файл. С помощью.htaccess
файлы замедляют ваш http-сервер Apache. Любая директива, которую вы можете включить в.htaccess
файл лучше установить вDirectory
блок в основном файле (файлах) конфигурации Apache, так как он будет иметь тот же эффект с лучшей производительностью.
Настройте VirtualHost по умолчанию / catchall на порту 80 для простого HTTP для перенаправления всего на ваши безопасные хосты:
<VirtualHost :80>
Servername www.example.com
ServerAlias *.example.com
# https://wiki.apache.org/httpd/RewriteHTTPToHTTPS
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
>other optional directives<
</VirtualHost>
Вышеупомянутое сохранит имя хоста при перенаправлении на SSL.
Тогда гораздо более эффективная конфигурация - использовать тот факт, что у вас есть сертификат SSL с подстановочными знаками (и вам даже не нужно зависеть от SNI) и создайте виртуальный хост имени для каждого из ваших поддоменов, с последним всеобъемлющим, что для любого субдомена, который явно не определен, перенаправляет на www
<VirtualHost *:443>
SSLEngine on
>>other optional and required (SSL) directives<<
SSLCertificateFile /etc/ssl/star.example.com.crt
SSLCertificateKeyFile /etc/ssl/star.example.com.key
ServerName "one.example.com"
DocumentRoot "/var/www/html/one"
</virtualHost>
<VirtualHost *:443>
SSLEngine on
>>other optional and required (SSL) directives<<
SSLCertificateFile /etc/ssl/star.example.com.crt
SSLCertificateKeyFile /etc/ssl/star.example.com.key
ServerName "two.example.com"
DocumentRoot "/var/www/html/two"
</virtualHost>
<VirtualHost *:443>
SSLEngine on
>>other optional and required (SSL) directives<<
SSLCertificateFile /etc/ssl/star.example.com.crt
SSLCertificateKeyFile /etc/ssl/star.example.com.key
ServerName "www.example.com"
DocumentRoot "/var/www/html/www"
</virtualHost>
# Use the fact that the configuration file is parsed in order
# and make this catch-all entry only catch what isn't defined above:
<VirtualHost *:443>
SSLEngine on
>>other optional and required (SSL) directives<<
SSLCertificateFile /etc/ssl/star.example.com.crt
SSLCertificateKeyFile /etc/ssl/star.example.com.key
ServerName "star.example.com"
ServerAlias *.example.com
Redirect / https://www.example.com
</virtualHost>
Или, если вам нужны минимальные конфигурации: mod_vhost_alias может быть интересно.