我在我的一台机器上设置了 phpMyID,并且我试图让 apache 仅在提交密码时才重定向到 HTTPS。我这样做是因为我重定向所有 openid 流量的原始设置不起作用 stackoverflow 不喜欢我的自签名证书。这是我写的新规则,但它不起作用:
RewriteRule http://%{SERVER_NAME}/openid/index.php(\?.+)$ https://%{SERVER_NAME}/openid/index.php$1
我在我的一台机器上设置了 phpMyID,并且我试图让 apache 仅在提交密码时才重定向到 HTTPS。我这样做是因为我重定向所有 openid 流量的原始设置不起作用 stackoverflow 不喜欢我的自签名证书。这是我写的新规则,但它不起作用:
RewriteRule http://%{SERVER_NAME}/openid/index.php(\?.+)$ https://%{SERVER_NAME}/openid/index.php$1
您需要使用 Cond 来测试端口(http 或 httpd)和查询字符串:
RewriteCond %{SERVER_PORT} 80
RewriteCond %{QUERY_STRING} (.+)
RewriteRule /openid/index.php https://%{SERVER_NAME}/openid/index.php?%1
如果在 .htaccess 上,您必须改用
RewriteCond %{SERVER_PORT} 80
RewriteCond %{QUERY_STRING} (.+)
RewriteRule openid/index.php https://%{SERVER_NAME}/openid/index.php?%1
更好的解决方案是:
RewriteCond %{SERVER_PORT} !^443$ 重写规则 ^openid/index\.php$ https://%{SERVER_NAME}/openid/index.php
说明:RewriteCond %{SERVER_PORT} 80
也匹配仅包含80
. 这同样适用于模式openid/index.php
(其中“<code>.”也可以是任何字符)。并且不需要附加查询,因为 mod_rewrite 会自动将最初请求的查询附加到替代项,除非给出了替代项的查询。