Попытка получить Apache 2.4.33 на экземпляре AWS EC2 для правильного завершения SSL-сертификата, похоже, что переменная окружения HTTPS
не заполняется до PHP, а правила переписывания .htaccess вообще не работают.
Это мои настройки:
/ etc / httpd / conf / httpd.conf :
<Directory "/var/www/">
Options -Indexed +FollowSymLinks -MultiViews
AllowOverride all
Require all granted
</Directory>
/ etc / httpd / conf.d / ssl.conf :
Listen 443 https
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/cert.crt
SSLCertificateKeyFile /etc/pki/tls/private/private.key
SSLCertificateChainFile /etc/pki/tls/certs/chain.ca-bundle
</VirtualHost>
/ etc / httpd / conf.d / vhosts.conf :
<VirtualHost *:80 *:443>
DocumentRoot /var/www/example.com
ServerName example.com
ServerAlias www.example.com
UseCanonicalPhysicalPort on
</VirtualHost>
/var / www / example.com / .htaccess :
RewriteEngine on
#if ELB http
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
#if server http
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
#if www.
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
Редактировать: .htaccess имеет -rw-rw-r--
разрешений.
И этоВот что сообщает PHP:
- для http://example.com (что по какой-то причине не применяется, несмотря на .htaccess):
$_SERVER['HTTPS'] = NULL
$_SERVER['SERVER_PORT'] = '80'
для
https://example.com:
$_SERVER['HTTPS'] = NULL
$_SERVER['SERVER_PORT'] = '443'
Единственная причина, по которой порт является правильным, связана с UseCanonicalPhysicalPort
, но почемупеременная HTTPS всегда равна нулю, и почему .htaccess ничего не делает?
Редактировать: Согласно комментарию Патрика, я разделил порты на один эксклюзивный VirtualHost для каждого порта, иубрал директиву UseCanonicalPhysicalPort
.Похоже, это решило первую проблему, и теперь PHP правильно отображает переменные $_SERVER['HTTPS']
и SERVER_PORT
.
Вторая проблема сохраняется: правила переписывания .htaccess по-прежнему не работают.
Спасибо за понимание!