2015-08-17 77 views
55

请不要推荐我带有超过173个upvotes的long and very detailed thread。它不适合我。我也尝试了很多其他的(1234)。他们都让我TOO_MANY_REDIRECTS或错误500。所以,这里是我的问题:使用.htaccess将HTTP重定向到HTTP

从我目前的.htaccess,这是发生了什么:

https://www.dukescasino.com/ - 完美的作品

https://dukescasino.com/ - 重定向到其上方是伟大的

两个以下负载选项罚款,但应重定向到HTTPS版本:

http://www.dukescasino.com/

http://dukescasino.com/

这是当前的.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

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

我不认为这是相关的,但即便如此,这里是当前活跃的插件列表:

  • 高级定制域
  • All In One SEO包
  • Bop搜索框项目类型For导航菜单
  • 联系表7
  • 禁用评论
  • 谷歌的XML的Sitemaps
  • 的Jetpack采用WordPress。COM
  • 搜索&筛选
  • 滑块WD
  • TablePress
  • UpdraftPlus - 备份/恢复
  • Wordfence安全
  • WPide
  • WP斯马什
  • 可湿性粉剂超高速缓存

编辑1 - 测试执行:

试验A:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} off 
# First rewrite to HTTPS: 
# Don't put www. here. If it is already there it will be included, if not 
# the subsequent rule will catch it. 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
# Now, rewrite any request to the wrong domain to use www. 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

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

结果: ERR_TOO_MANY_REDIRECTS

试验B:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

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

结果: ERR_TOO_MANY_REDIRECTS

试验C:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 

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

结果: ERR_TOO_MANY_REDIRECTS

试验d:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

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

结果: ERR_TOO_MANY_REDIRECTS

测试E:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L] 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}$1 

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

结果:发现302。此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误错误。

+0

也许只是一个错字,但是你拼写'.htaccess'错误(同样的方式)3次?您当前的.htaccess文件不完整,您缺少'RewriteEngine On'指令。大概,当你添加规范重定向时,你将这个添加到你的.htaccess文件的最顶部?你声明'https:// example.com'重定向好,但是,这不是在你的配置文件中指出的?这是怎么发生的?知道你实际尝试过的东西是有用的 - 这是行不通的。 – MrWhite

+0

对不起,.htaccess是一个错字,我现在修复了。我还更新了当前的.htaccess代码以及我对每个结果所做的所有测试。我不知道没有www的https如何重定向到https:// www版本。谢谢 –

+0

您通常会期望设置服务器变量“HTTPS”(否则您的结果会显示)。你是否支持代理? (测试E很可能会导致某种“递归”的404?) – MrWhite

回答

58

问题解决了!

最后的.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{ENV:HTTPS} !=on 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
+15

对于我在Dreamhost上托管的网域,此更改导致“[www.domain.com]重定向您太​​多次了”。没有运气。 然而,这工作: 的RewriteCond%{} HTTPS = ON 重写规则^ HTTPS://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301] –

+0

这给了我'太多redirects'上Godaddy的。 –

+10

我不得不改变'RewriteCond'到下面的一个以避免'太多重定向':'RewriteCond%{HTTPS}!= on' – lucaferrario

97

Dreamhost上,这个工作:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# BEGIN WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
+5

这也适用于一个普通的非Dreamhost服务器 – icc97

+0

这一个是在namecheap共享主机上为我工作。 –

+0

这工作在siteground wordpress安装。 – Gere

1

我发现这个问答&一个没有工作对我来说,不幸中列出的所有解决方案。做什么工作是:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

# add a trailing slash to /wp-admin 
RewriteRule ^wp-admin$ wp-admin/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
RewriteRule ^(wp-(content|admin|includes).*) $1 [L] 
RewriteRule ^(.*\.php)$ $1 [L] 
RewriteRule . index.php [L] 

RewriteCond %{HTTP_HOST} ^example\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L] 
</IfModule> 
# End Wordpress 

请注意,上述的WordPress的规则是在多用户网络模式的Wordpress。如果你的WordPress是在单点模式下,你可以使用:

# 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] 

RewriteCond %{HTTP_HOST} ^example\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ 
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L] 
</IfModule> 
# End Wordpress 
11

它为我的作品:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTPS} !on   
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L] 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 
6

在我的情况下,htaccess文件包含大量的插件安装像遥远的未来规则到期WPSuperCache以及wordpress本身的行。

为了不把事情搞得一团糟,我不得不把该解决方案在htaccess的顶端(这是很重要的,如果你把它在最后它会导致一些错误的重定向由于与缓存插件冲突)

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
</IfModule> 

这样,你的线不会被wordpress弄乱,以防一些设置改变。此外,<IfModule>部分可以重复没有任何问题。我要感谢Jason Shah整洁htaccess rule

+0

这是必不可少的信息。感谢您发布它! –

0

以上都不适用于我。但是,这些线路解决了同样的问题在我的WordPress网站:

RewriteEngine On 

RewriteCond %{HTTP:HTTPS} !on 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
0

这里是一个替代的解决方案,如果你不希望编辑.htaccess你可以使用:

add_action('template_redirect', 'nonhttps_template_redirect', 1); 

function nonhttps_template_redirect() { 

    if (is_ssl()) { 

     if (0 === strpos($_SERVER['REQUEST_URI'], 'https')) { 

      wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']), 301); 

      exit(); 

     } else { 

      wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301); 

      exit(); 

     } 

    } 

} 

你可以在这个地方你的主题的底部functions.php

+0

你知道这对谷歌索引是怎么影响的? –

+0

还不完全确定,我的猜测是它将保持不变,这取决于Google可能会将它作为HTTPS版本的起始索引。 –

-1

只需添加此代码,它会像魅力:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC] 
    RewriteRule^http%2://%1%{REQUEST_URI} [R=301,L] 
</IfModule> 
0

这是测试,使用安全

当您编辑在永久设置的东西,所以这将是相同的代码(没有冲突

# 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 

<IfModule mod_rewrite.c> 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L] 
</IfModule> 

注:你必须更改WordPress地址 & 网站地址网址https://常规设置也(wp-admin/options-general.php

+0

WordPress部分应该在HTTPS之后,否则将无法工作。或者,至少,这是发生在我身上:) –

+0

感谢您的信息! – l2aelba

0

在WordPress添加这种.htaccess文件:

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR] 
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC] 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC] 

因此默认的WordPress的.htaccess文件应该是这样的:

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

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR] 
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC] 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC] 
</IfModule> 
0

以上决赛。 htaccess和测试A,B,C,D,E没有为我工作。我只是用下面两行代码,并在我的WordPress网站的工作原理:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.thehotskills.com/$1 [R=301,L] 

我不知道我在那里做了错误,但此页帮我摆脱困境。

0
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{HTTPS} !=on 
    RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^digitalsoftwaremarket.com [NC] 
    RewriteRule ^(.*)$ http://www.digitalsoftwaremarket.com/$1 [L,R=301] 
</IfModule> 
0

easyest方式来重定向HTTP到HTTPS在WordPress的它来修改SITE_URL和家庭从http://example.comhttps://example.com。 WordPress的将做重定向。 (这就是为什么你得到“太多重定向”的错误,wordpress重定向到http而.htaccess将重定向到https)

+0

我不确定它是否做SEO的任何重定向:) – jcdarocha

+1

当然确实。重定向301(永久),谷歌将重新索引 – Rafael

2

为了您的信息,它真的取决于您的托管服务提供商。

在我的情况下(Infomaniak),没有任何上述实际工作,我有无限的重定向循环。

做到这一点,正确的方法是actually explained in their support site

RewriteEngine on 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule (.*) https://your-domain.com/$1 [R=301,L] 

所以,始终与您的托管服务提供商。希望他们有一篇文章解释如何做到这一点。否则,只需要支持。

相关问题