2012-09-12 39 views
0

我是Apache的新手,我发现理解重写规则语法非常困难。对特定网址启用https使用重写规则

这里是我的设置: 我在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之后会出现什么内容。

我不想详细说明为什么,但是有没有办法强制它覆盖上面的URL去没有rediret_to废话mydomain.com/wp-login.php?

回答

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。

+0

这不起作用 – Mucker

+0

@Mucker其实,忘了其他领域。请参阅编辑。 –

+0

这比迄今为止我所做的任何工作都要好得多。它现在可以正确登录和注销。但是另一个问题已经出现。请阅读我上面的更新,看看你是否有任何想法如何解决它。谢谢 – Mucker

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

+0

这没有奏效 – Mucker