Apache htaccess重定向http://和http://www 到https://这对子域很好

Apache htaccess重定向http://和http://www 到https://这对子域很好,apache,.htaccess,ssl,https,rackspace-cloud,Apache,.htaccess,Ssl,Https,Rackspace Cloud,我正在尝试重定向以下条件: http://mydomain.com http://www.mydomain.com 致: 但我不想让它把子域搞得一团糟,这样键入以下内容的人: 不会重定向到https。我当前的htaccess文件如下所示: # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQ

我正在尝试重定向以下条件:

http://mydomain.com
http://www.mydomain.com
致:

但我不想让它把子域搞得一团糟,这样键入以下内容的人:

不会重定向到https。我当前的htaccess文件如下所示:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
RewriteEngine On
RewriteBase /

#subdomain 1
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]

#subdomain 2
RewriteCond %{HTTP_HOST} ^sub2.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub2/$1 [R=301,L]

#get rid of www, works with rackspace cloud sites
RewriteCond %{HTTP_HOST} ^www.mydomain.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

#force https, works with rackspace cloud sites
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
但是,尽管它似乎对那个人起了作用,但它给我带来了一个“重定向循环”。另一方面,在我完成这项工作后,我需要添加一些重定向来处理子域,例如,以不可见的方式(不更改URL)重定向到。因此,无论在这里做什么都不应该阻止这种情况的发生

如果有帮助,该站点将托管在Rackspace云站点上

有人知道怎么做吗

谢谢

编辑

我试过这个:

#http to https
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [L,R=301]

#subdomain 1
RewriteBase /
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]
它似乎在大多数情况下都能工作,只是当我输入一个子文件夹时,它似乎不起作用。例如,如果我在地址栏中键入:

mydomain.com/temp
决议如下:

http://mydomain.com/temp/
编辑2

我已经取得了一些进展。到目前为止,我已经将www重定向到非www,并且子域工作(尽管地址栏确实发生了变化——我想这是可以接受的)。如果我把任何形式的强制https放在那里,似乎会把事情搞砸。它似乎与www到非www块冲突。我可以要一个或另一个。有没有办法让这两个部分一起工作

此外,WordPress站点地址和WordPress地址都设置为
https://mydomain.com

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# Redirect from www to non-www location
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

# Redirect http to https
# THIS DOES NOT WORK - causes redirect loop
#RewriteCond %{HTTPS} off
#RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

# subdomain
RewriteBase /
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]

RewriteBase /
RewriteCond %{HTTP_HOST} ^sub2.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub2/$1 [R=301,L]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
#从www重定向到非www位置
重写cond%{HTTP_HOST}^www\.mydomain\.com[NC]
重写规则^(.*)$https://mydomain.com/$1[R=301,L]
#将http重定向到https
#这不起作用-导致重定向循环
#重写条件%{HTTPS}关闭
#重写规则(*)https://%{HTTP\u HOST}%{REQUEST\u URI}
#子域
重写基/
重写cond%{HTTP_HOST}^sub1.mydomain.com[NC]
重写规则^(.*)$http://mydomain.com/sub1/$1[R=301,L]
重写基/
重写cond%{HTTP_HOST}^sub2.mydomain.com[NC]
重写规则^(.*)$http://mydomain.com/sub2/$1[R=301,L]
结论

对于大多数网络主机来说,anubhava的解决方案可以很好地工作。然而,我相信这里的关键是货架空间。他们有自己喜欢的方法,我通过搜索他们的知识库找到了这些方法。这是最后一个htaccess文件,它非常有效。所有www URL被发送到非www URL,http被发送到https,子域重定向到其适当的子目录,而不会弄乱WordPress:

RewriteEngine On
RewriteBase /

#subdomain 1
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]

#subdomain 2
RewriteCond %{HTTP_HOST} ^sub2.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub2/$1 [R=301,L]

#get rid of www, works with rackspace cloud sites
RewriteCond %{HTTP_HOST} ^www.mydomain.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

#force https, works with rackspace cloud sites
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
重新编写引擎打开
重写基/
#子域1
重写cond%{HTTP_HOST}^sub1.mydomain.com[NC]
重写规则^(.*)$http://mydomain.com/sub1/$1[R=301,L]
#子域2
重写cond%{HTTP_HOST}^sub2.mydomain.com[NC]
重写规则^(.*)$http://mydomain.com/sub2/$1[R=301,L]
#摆脱www,使用rackspace云站点
重写cond%{HTTP_HOST}^www.mydomain.com[NC]
重写规则^(.*)$https://mydomain.com/$1[R=301,L]
#强制https,可用于rackspace云站点
重写cond%{ENV:HTTPS}!关于[NC]
重写规则^(.*)$https://mydomain.com/$1[R,L]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

非常感谢您在这方面的帮助。

您可以通过以下方式访问.htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
RewriteEngine On
RewriteBase /

#subdomain 1
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]

#subdomain 2
RewriteCond %{HTTP_HOST} ^sub2.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub2/$1 [R=301,L]

#get rid of www, works with rackspace cloud sites
RewriteCond %{HTTP_HOST} ^www.mydomain.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

#force https, works with rackspace cloud sites
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
重新编写引擎打开
重写基/
#子域1
重写cond%{HTTP_HOST}^sub1.mydomain.com[NC]
重写规则^(.*)$http://mydomain.com/sub1/$1[R=301,L]
#子域2
重写cond%{HTTP_HOST}^sub2.mydomain.com[NC]
重写规则^(.*)$http://mydomain.com/sub2/$1[R=301,L]
#摆脱www,使用rackspace云站点
重写cond%{HTTP_HOST}^www.mydomain.com[NC]
重写规则^(.*)$https://mydomain.com/$1[R=301,L]
#强制https,可用于rackspace云站点
重写cond%{ENV:HTTPS}!关于[NC]
重写规则^(.*)$https://mydomain.com/$1[R,L]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

PS:请注意,HTTPS服务器变量在Rackspac云环境中没有正确实现。在Rackspace云中查找HTTPS的正确变量是
ENV:HTTPS

谢谢,我尝试了这个,但它创建了一个重定向循环并使站点崩溃。我不知道为什么…我只是尝试了一下,仍然得到了一个重定向循环。现在我无法访问/wp admin/了。嗯…好的,wp管理员的事情一定是一些奇怪的DNS问题-也许域名还在传播(我们大约12小时前切换了它)。是,键入
https://mydomain.com/
有效,但我正在努力使它能够http://mydomain.com/将转发到https://相同的结果,抱歉。重定向循环。我尝试删除子域部分,但仍然有相同的结果。我要用我最新的htaccess文件更新我的问题。我取得了一些进步,我又尝试了一次,重定向循环。这很奇怪。我几乎想知道WordPress是否试图以不同的方式转发内容,从而导致循环。我确实将WP URL设置为
https://mydomain.com
正如你所建议的。jbalyo,我非常感谢你给@anubhava评分,你应该将你的“结论”移到一个单独的答案中,并将其标记为答案。我完全跳过了你的问题来阅读已解决的答案,但阅读了该答案的所有评论后,我又回到了这里。如果你这样做,即时+1;)@ps2goat:说得好,我用下面的最终结果更新了答案。