使用.htaccess将HTTPredirect到HTTP

请不要向我推荐超过173条的赞扬的非常详细的线程 。 这不适合我。 我也尝试了很多其他( 1,2,3,4 )。 他们都给我TOO_MANY_REDIRECTS或错误500.所以,这是我的问题:

用我当前的.htaccess,这是发生了什么事情:

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

https://dukescasino.com/ – redirect到上面这是伟大的

下面的两个选项加载正常,但它应该redirect到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> 

我不相信这是相关的,但如果是这样,这里是当前活动插件的列表:

  • 高级自定义字段
  • 所有在一个SEO包
  • Bopsearch框项目types适用于导航菜单
  • 联系表格7
  • 禁用评论
  • Google XML站点地图
  • Jet.com由WordPress.com
  • search和filter
  • 滑块WD
  • TablePress
  • UpdraftPlus – 备份/恢复
  • Wordfence安全
  • WPide
  • WP Smush
  • WP超级caching

编辑1 – 执行的testing:

testingA:

 <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

testingB:

 <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

testingC:

 <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

testingD:

 <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

testingE:

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

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

在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> 

问题解决了!

最后.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> 

这个对我有用:

 # 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 

在我的情况下,htaccess文件包含很多像远期 过期WPSuperCache插件安装的规则,也包括wordpress本身的行。

为了不让事情搞砸,我不得不把解决scheme放在htaccess的顶部(这很重要,如果你把它放在最后,由于与caching插件冲突导致一些错误的redirect)

 <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规则 。

我发现这个问答上列出的所有解决scheme都不适合我,不幸的是。 什么工作是:

 # 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的规则是在多用户networking模式下的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 

以上都没有为我工作。 但是,这些行解决了我的WordPress网站上的同样的问题:

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

如果您不想编辑.htaccess可以使用以下替代解决scheme:

 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的底部

这是testing和安全使用

当你在固定链接设置上编辑某些东西的时候,所以它会是相同的代码( 没有冲突

 # 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地址网站地址 URL更改为https://wp-admin/options-general.php

在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> 
 <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> 

以上最后的.htaccess和testingA,B,C,D,E没有为我工作。 我只使用下面的2行代码,它在我的WordPress网站:

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

我不确定我犯了什么错误,但是这个页面帮助了我。

最简单的方法来redirectHTTP到HTTPS的WordPress的修改site_url和家从http://example.com到https://example.com 。 WordPress的将做redirect。 (这就是为什么你得到“太多的redirect”错误,wordpressredirect到http,而.htaccess将redirect到https)

只要添加这个代码,它会像魅力一样工作:

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