为特定URL使用重写规则启用https

时间:2012-09-12 06:04:12

标签: wordpress apache mod-rewrite ssl

我是Apache新手,我发现理解重写规则语法非常困难。

这是我的设置: 我在mydomain.com上有一个Wordpress MU站点 我已停放域名site1,site2.com指向mydomain.com

我想要的: 我希望此网址http://mydomain.com/wp-login.php重定向到同一地址,但首先使用https。我已经看过几个关于如何做到的教程,但是有一个问题。

我的问题: 如果我使用像

这样的东西
#RewriteCond %{HTTPS} !=on
#RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

这也将我的其他网站重定向到https版本,因为它们是停放域并有效加载相同的htaccess代码;因为我拥有的证书仅适用于mydomain.com,我收到证书错误。

我只需要在mydomain.com上保护页面,但只能保护wp-login.php页面。另一个问题是该页面可以在URL中移动,IE:

mydomain.com/wp-login.php

mydomain.com/somecracp/wp-login.php

mydomain.com/wp-login.php?xys=5653

我需要一个正则表达式,它会在URL中的任何位置检测mydomain.com的域名和wp-login.php。然后我需要为他们强制https。有人可以为我建造代码吗?

更新: 我可能已经找到了部分问题。似乎登录页面本身也在尝试进行一些重定向。当我访问网站http://mysite.com/wp-admin的管理部分时,它会检测到您没有登录;然后它会将您重定向到登录页面,但在末尾附加一个redirect_to查询字符串,如下所示:

http://mydomain.com/subdomain/wp-login.php?redirect_to=http%3A%2F%2Fmydomain.com%2Fsubdomain%2Fwp-admin%2F&reauth=1

这似乎是这样做的,这样一旦您成功登录,它可以将您重定向到您之前尝试访问的管理部分。这个“redirect_to”及其后面的内容是您登录后将重定向到的URL。

我不打算详细说明原因,但有没有办法可以强制它覆盖上面的网址去mydomain.com/wp-login.php而没有rediret_to废话?

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com$ [NC]
RewriteCond %{HTTPS} !on
RewriteRule wp-login.php https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA]

RewriteRule的正则表达式部分检查请求中是否有wp-login.php的任何实例,如果有,则重定向到https。

答案 1 :(得分:0)

尝试

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} wp-login.php [NC]
RewriteRule https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

rewriteCondition将检查https是否关闭,请求uri包含wp-login.php,然后重定向。