0

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

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

我想要什么:我希望这个 URL 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

我需要一个正则表达式来检测 mydomain.com 的域名和 URL 中任意位置的 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。

我不会详细说明为什么,但是有没有办法可以强制它覆盖上面的 URL 以访问 mydomain.com/wp-login.php 而没有任何 rediret_to 废话?

4

2 回答 2

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。

于 2012-09-12T06:08:21.210 回答
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,然后重定向。

于 2012-09-12T06:59:48.483 回答