Apache не сообщает PHP-переменной сервера HTTPS - PullRequest
0 голосов
/ 24 мая 2018

Попытка получить 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:

  1. для 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 по-прежнему не работают.

Спасибо за понимание!

...