我希望能够在我们的 apache 配置上将所有流量从 http 重定向到 https,除非传入请求来自特定源(在这种情况下,它来自与服务器相同的 IP)。
上下文:我们有一个 Zend 服务器,该服务器运行带有 apache 配置的 php 应用程序,并且同一个 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>
答案1
指%{HTTP_HOST}
的是服务器主机名,即Host:
标头,而您想要的条件是特定的源 IP 地址。您应该比较%{REMOTE_ADDR}
,而不是:
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1
另外,你能使用 HTTPS 进行本地流量,但这不是必需的。