使用.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>