Apache mod_rewrite:重写时HTTPS总是关闭

时间:2015-06-29 13:01:11

标签: apache .htaccess mod-rewrite https

我正在尝试将整个站点重写为HTTPS,但有一个例外是通过普通HTTP。

无论我做什么,%{HTTPS}似乎始终为off%{SERVER_PORT}始终为80。即使我通过https://...成功访问该网站。在PHP中转储$_SERVER全局显示正确的值(HTTPS为on等)。

mod_rewrite何时确实知道这些服务器变量的值,或者我的服务器配置是否被某种方式破坏了?

我使用LogLevel debug rewrite:trace6来查找问题,似乎服务器认为HTTPS永远不会启用。

我有两个虚拟主机,一个用于80个流量,一个用于443个流量。是否有可能在443虚拟主机中没有正确读取我的.htaccess重写规则?

自签名证书可以创建这样的问题吗?一旦我接受每个会话的“冒险”证书,我就可以访问该网站。

我正在运行Apache 2.4 +,php5-fpm,该网站是WordPress多站点。这是我目前的.htaccess

RewriteEngine On

RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTP_HOST} ^example.dev
RewriteCond %{REQUEST_URI} !^/nohttps.*
RewriteRule ^(.*)$ https://example.dev/$1 [L,R=301]

RewriteCond %{SERVER_PORT} ^443$ # This line never matches according to logs.
RewriteCond %{HTTP_HOST} ^example.dev
RewriteCond %{REQUEST_URI} ^/nohttps.*
RewriteRule ^(.*)$ http://example.dev/$1 [L,R=301]

# WordPress' own rules onwards.

RewriteBase /

RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

由于第二个%{SERVER_PORT} 从不匹配(80!= 443),所有example.dev/nohttps个请求都会被. index.php [L]重写,并将其重定向到主页。

此外,我已在两个虚拟主机中将UseCanonicalPhysicalPort设置为on

0 个答案:

没有答案