.Htaccess规则将各自的HTTP链接重定向到HTTP和HTTPS到HTTPS?

.Htaccess规则将各自的HTTP链接重定向到HTTP和HTTPS到HTTPS?,http,.htaccess,mod-rewrite,https,Http,.htaccess,Mod Rewrite,Https,首先,这里是我目前使用的.htaccess规则: Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://example.com/$1 [R=301,L] 这是伟大的,并重定向我的旧域中的每一个链接到新域中各自的链接。就是,http://olddomain.com/1.html 被重定向到http://example.com/1.html 等等 但它不会重定向https://olddomain.com/1.html 到h

首先,这里是我目前使用的.htaccess规则:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://example.com/$1 [R=301,L]
这是伟大的,并重定向我的旧域中的每一个链接到新域中各自的链接。就是,http://olddomain.com/1.html 被重定向到http://example.com/1.html 等等

但它不会重定向https://olddomain.com/1.html 到https://example.com/1.html

正如你所知道的,我试过了,下面是我碰巧也测试过的规则。不幸的是,他们正在创建某种循环,重定向不起作用

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) example.com/$1 [R=301,L]


那么,有人能告诉我将http页面重定向到http和将https页面重定向到https的规则吗?谢谢。

您的HTTPS重写条件不正确。Cond是一个正则表达式,不是一个质量测试。应该是

RewriteCond %{HTTPS} !^on
%{HTTPS}var将只包含on或off。Never=on,因此匹配失败并触发重定向,即使https确实启用

更新

对于无条件HTTP->HTTPS重定向,您需要重定向到HTTPS URL。您的版本只检测HTTPS是否关闭,然后重定向到同一url,从而导致循环。您需要的是:

RewriteCond %{HTTPS} !^on
RewriteRule (.*) https://example.com/$1 [R=301,L]

马克,那也不行。你能用完整的规则编辑你的答案吗?也许我遗漏了什么好吧也许我不清楚。我希望来自HTTP://olddomain.com/1.html的人被重定向到HTTP://newdomain.com/1.html,来自HTTPS://olddomain.com/1.html的人被重定向到HTTPS://newdomain.com/1.html,等等。也就是说,如果它们来自HTTP连接,它们将被重定向到HTTP新域。如果它们来自HTTPS连接,它们将被重定向到HTTPS新域。我想要一个访问规则。你能帮忙吗?任何人,我真的需要这个?!不幸的是,这返回了一个500内部服务器错误。重定向不起作用。可能是因为olddomain.com和example.com在同一台服务器上,并且共享同一个SSL证书?抱歉。逗号后面的空格不应该出现。不知道他们是怎么到那里的。我编辑了这篇文章来纠正它。让我知道它是否有效。它不完全有效。http://olddomain.com 重定向到http://example.com. 但是,当我转到HTTPS://olddomain.com时,它在地址栏中显示相同的URL,同时显示example.com中的内容,并且内容被破坏。没有样式设置。是否已清除浏览器缓存或使用其他浏览器?可能是缓存问题。htaccess中是否有其他针对OldDomain的规则?olddomain是否使用与example.com相同的文件夹?你能检查发送的邮件头吗?
RewriteCond %{HTTPS} !^on
RewriteRule (.*) https://example.com/$1 [R=301,L]
#if https on
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
#else
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]