Я хочу иметь возможность перенаправлять весь трафик с http на https в нашей конфигурации apache, за исключением случаев, когда входящий запрос поступает из определенного источника (в данном случае он исходит с того же IP-адреса, что и сервер).
Контекст: у нас есть сервер Zend, на котором запущено приложение php с конфигурацией apache, и тот же сервер Zend также запускает очередь заданий, которая запускает задание http на одну из наших конечных точек REST. Очевидно, мы не можем маршрутизировать это через https, поскольку это внутренний трафик, но я не уверен, как структурировать наши RewriteConds, чтобы он правильно пропускал и обслуживал http только для этого конкретного запрашивающего, но https для всех остальных.
Вот условие на данный момент - я действительно не совсем знаком с синтаксисом Apache, но мне нужно работать с тем, что я знаю;)
<VirtualHost *:80>
TimeOut 5600
ServerName <name>
ServerAlias <alias>
RewriteEngine On
RewriteCond %{HTTP_HOST} !=example\.com\:80
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
DocumentRoot <docroot>
RewriteCond %{REQUEST_URI} !^(/index\.php|/favicon\.ico|/robots\.txt|/a/css(.*)|/a/js(.*)|/a/i(.*)|/alive\.html)
RewriteRule ^(.*)$ /index.php/$1 [L]
<Directory "<docroot>">
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:443>
TimeOut 12000
ServerName <name>
ServerAlias <alias>
DocumentRoot <docroot>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^(/index\.php|/favicon\.ico|/robots\.txt|/a/css(.*)|/a/js(.*)|/a/i(.*)|/alive\.html)
RewriteRule ^(.*)$ /index.php/$1 [L]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "<docroot>">
Options All
AllowOverride All
Require all granted
</Directory>
SSLEngine on
...ssl etc
</VirtualHost>
В %{HTTP_HOST}
относится к имени хоста сервера, т.е. Host:
заголовок, а желаемое условие - конкретный IP-адрес источника. Вы должны сравнивать %{REMOTE_ADDR}
, вместо этого:
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1
Вас также жестяная банка используйте HTTPS для локального трафика, но это необязательно.