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



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

这是我的设置:我在mydomain.com上有一个Wordpress MU网站我已经停放了指向mydomain.com 的域site1、site2.com

我想要什么:我想要这个URLhttp://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

我需要一个正则表达式,它可以检测mydomain.com的域名和URL中的wp-login.php。然后我需要强制它们使用https。有人能帮我编译代码吗?

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

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

这样做似乎是为了在你成功登录后,它可以将你重定向到你之前尝试访问的管理部分。这个"重定向到"和它之后的是它将在您登录后重定向到的URL。

我不想详细说明为什么,但有没有办法强迫它覆盖上面的URL,转到mydomain.com/wp-login.php,而不使用rediret_to垃圾?

试试这个:

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

RewriteRule的regex部分检查请求中是否存在wp-login.php的任何实例,如果存在,则重定向到https。

尝试

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,然后重定向。

最新更新