У меня есть развернутый веб-сайт, который использует кохану и перезапись URL-адресов, чтобы сделать URL-адреса более спокойными. Это прекрасно работает.
У меня также установлен Moodle в подкаталоге на том же сервере и поддомен, определенный для этого каталога. Итак, Moodle установлен в каталоге под названием «студенты», а субдомен - «student.example.com». Это тоже отлично работает.
Сейчас я пытаюсь установить сертификат SSL, который мне нужен только в поддомене. У меня есть подстановочный сертификат Comodo, поэтому он должен работать с поддоменами. Когда я использую https://example.com он работает нормально, поэтому я вижу, что сертификат SSL в силе. Однако когда я пытаюсь https://students.example.com он перенаправляет на основной сайт. http://students.example.com хотя работает нормально.
Файл .htaccess, который работает по правилам перезаписи kohana:
# Use PHP5.4 Single php.ini as default
AddHandler application/x-httpd-php54s .php
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
Options -Indexes
Согласно документации, мне нужно будет добавить следующие правила для поддомена:
#.htaccess WildCard SSL
RewriteCond %{HTTP_HOST} ^students.example.com$
RewriteCond %{REQUEST_URI} !^/students/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /students/$1
RewriteCond %{HTTP_HOST} ^students.example.com$
RewriteRule ^(/)?$ students/index.php [L]
Я попытался добавить это как первое правило и как второе правило, но ни одно из них не сработало. Теперь я понимаю, что мне придется написать новый набор правил, чтобы делать то, что я хочу.
Будем очень признательны за любые советы о том, как это сделать. Этот сайт размещен на Bluehost, если это имеет значение.
Проверяли ли вы свой config.php в moodle после переключения SSL?
Обратите внимание, что ваш $CFG->wwwroot
теперь изменилось. Это должно быть https: //students.example.com
Похоже, вы пытаетесь разместить example.com и student.example.com на одном IP-адресе. Это нормально, если вы используете обычный HTTP, но если вы используете HTTPS (порт 443), вам необходимо обслуживать его на другом IP-адресе.
<VirtualHost *:80>
DocumentRoot /var/www/example.com
ServerName example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/students.example.com
ServerName students.example.com
</VirtualHost>
<VirtualHost 192.168.1.10:443>
DocumentRoot /var/www/example.com
ServerName example.com
SSLEngine on
SSLCertificateFile /path/to/example.com.cert
SSLCertificateKeyFile /path/to/example.com.key
</VirtualHost>
<VirtualHost 192.168.1.11:443>
DocumentRoot /var/www/students.example.com
ServerName students.example.com
SSLEngine on
SSLCertificateFile /path/to/example.com.cert
SSLCertificateKeyFile /path/to/example.com.key
</VirtualHost>
Я подозреваю, что у вас может быть другая проблема. HTTP-запрос выглядит примерно так:
GET /foo.php HTTP/1.1
Host: monkedung.example.com
Keep-Alive: timeout=15
Connection: Keep-Alive
и т. д. Когда вы шифруете его с помощью SSL, зашифровывается все, что находится после строки GET, поэтому Apache не имеет возможности даже знать, какой хост вы запрашиваете. Не зная хоста, он не может узнать, какой сертификат использовать для расшифровки запроса. Он также не знает, в какой каталог перенаправить, какой файл .htaccess использовать или что-то еще, определенное хостом. По этой причине, AFAIK, вы можете использовать только один хост ssl на IP-адрес.
Я бы попробовал установить
students.example.com
в качестве домена apache по умолчанию и example.com, если это единственный, для которого вы хотите использовать ssl. Я бы также включил отладку ваших правил перезаписи, чтобы вы могли видеть, действительно ли они срабатывают. Если проблема связана с упомянутой выше проблемой ssl, я подозреваю, что вы даже не зашли так далеко.
Надеюсь это поможет.