使用.htaccess将HTTP重定向到HTTP


76

请不要推荐我有超过173个投票的冗长而详尽的主题。它对我不起作用。我还尝试了许多其他(1234)。它们都给我TOO_MANY_REDIRECTS或错误500。所以,这是我的问题:

使用我当前的.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>

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

  • 高级自定义字段
  • 多合一SEO包
  • 导航菜单的Bop搜索框项目类型
  • 联络表格7
  • 禁用评论
  • Google XML网站地图
  • WordPress.com的Jetpack
  • 搜索和过滤
  • WD滑块
  • TablePress
  • UpdraftPlus-备份/还原
  • 围栏安全
  • WPide
  • WP Smush
  • 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 Internal Server Error错误。


也许只是拼写错误,但您拼错.htaccess了3次(相同方式)?您当前的.htaccess文件不完整,您缺少RewriteEngine On指令。大概,当您添加规范重定向时,您是将其添加到.htaccess文件的最顶部吗?您指出可以https://example.com重定向,但是,配置文件中未指出吗?这在哪里/如何发生?知道您实际尝试过的内容很有用-这是行不通的。
MrWhite 2015年

抱歉,.htaccess是一个错字,我现在已将其修复。我还更新了当前的.htaccess代码以及对每个结果进行的所有测试。我不知道没有www的https如何重定向到www版本。谢谢
克里斯蒂亚诺·玛雅2015年

通常,您希望设置服务器变量HTTPS(否则,您的结果将提示您)。您是代理人吗?(测试E可能会导致某种“递归” 404?)
怀特先生

我刚刚联系了123-reg(托管公司),以检查他们是否有任何东西在搞乱。即使我在其(123reg)控制面板中具有有效的.htaccess并设置了重定向工具,我也得到了ERR_TOO_MANY_REDIRECTS。
克里斯蒂亚诺·玛亚

Answers:


140

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

1
这是我为namecheap共享托管服务的。
Liakat '16

1
也在asmallorange.com上工作
莱昂纳多·埃雷拉

在提供者Time4VPS上使用Wordpress 4.7.4在LAMP服务器上为我工作
John Smith

确保正确获得规则的确切顺序。我已经将重写规则置于现有的WordPress规则之下,但是随后仅重新路由了根域,而没有任何HTTP URI请求。在现有WordPress规则之上的正确排序可以正确路由所有HTTP请求。
delrocco

3
无需指出可以运行的每个主机!这是.htaccess的简单代码,因此它应该在大多数接受.htaccess的系统上运行。如果它不起作用,那是由于一种奇怪的情况。
Phill Healey '18 -4-6

91

问题解决了!

最终的.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>

19
对于我在Dreamhost上托管的域,此更改导致“ [www.domain.com]重定向您太​​多次”。没运气。但是,这可行:RewriteCond%{HTTPS}!=在RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301]
Jason Shah

11
我只需RewriteCond要将以下内容更改为以下内容即可too many redirectsRewriteCond %{HTTPS} !=on
lucaferrario,2016年

对我来说,virtualmin apache 2.4引起的禁止。@ jason-shah的解决方案有效。
AleksandarPavić'16

对我不起作用。此解决方案重定向“您太多次”。铬说。
zhekaus

3
这是唯一对我有用的解决方案。(测试过多。)“ ENV:”至关重要。从答复和其他解决方案来看,似乎在某些主机上您要么必须将其包括在内,而在其他主机上则必须将其省略。顺便说一句对于任何想要使用此功能的人,请考虑使用R=301而不是仅仅使用R(这意味着302重定向)。
Vit Kovalcik '17

15

这个对我有用:

# 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

11

就我而言,htaccess文件包含许多规则,这些规则是由诸如Far Future ExpirationWPSuperCache之类的插件安装的,以及来自wordpress本身的代码行。

为了不弄乱事情,我不得不将解决方案放在htaccess的顶部(这很重要,如果您将它放在最后,由于与缓存插件的冲突会导致一些错误的重定向)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

这样,万一某些设置发生更改,您的行就不会被wordpress弄乱。同样,<IfModule>可以重复该部分而没有任何问题。

我要感谢杰森·沙阿的整齐htaccess的规则


这是必不可少的信息。感谢您发布!
亨里克·佩特森

4

供您参考,这实际上取决于您的托管服务提供商。

在我的情况下(Infomaniak),以上内容均无实际效果,并且出现了无限重定向循环。

实际上,在其支持站点中说明了执行此操作的正确方法:

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

因此,请始终与您的托管服务提供商联系。希望他们有一篇文章解释如何做到这一点。否则,请寻求支持。


2

经测试,使用安全

为什么?:当Wordpress编辑您的重写规则时,请确保不要删除HTTPS规则!因此,这与本地Wordpress规则没有冲突

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

# BEGIN WordPress
<IfModule mod_rewrite.c>
  #Your our Wordpress rewrite rules...
</IfModule>
# END WordPress

注意:您还必须在常规设置()中将WordPress地址站点地址url更改为https://wp-admin/options-general.php


WordPress部分应该在HTTPS之后,否则它将不起作用。或者,至少,这就是发生在我身上的事情:)
Ste_95

确认@ Ste_95说了什么。我必须将HTTPS重写块放在默认的WP永久链接配置之前。
贾斯汀·蒂尔森

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

1

以上都不对我有用。但是这些行在我的WordPress网站上解决了相同的问题:

RewriteEngine On

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

1

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


我不确定它是否对SEO进行任何重定向:)
jcdarocha

1
当然可以。重定向301(永久),谷歌将重新编制索引
拉斐尔

请记住,这不适用于Google Search Console!
Hexodus

它将正常工作。...WordPress将执行重定向(301)。请牢记:rtfm
Rafael

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


尚不完全确定,我猜它是否会保持不变,具体取决于Google可能将其索引为HTTPS版本的原因。
更高的编码,

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

上面的最终.htaccess和测试A,B,C,D,E对我不起作用。我只使用了以下两行代码,它可以在我的WordPress网站中使用:

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

我不确定我在哪里犯错,但是此页面帮助了我。


0

没有,如果这对我有用。首先,我必须查看我的提供商,以了解他们如何激活.htaccess提供商中的SSL

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

但是,我花了几天的时间进行研究,wp-config.php因为我提供的网站位于代理之后,因此我必须添加以下几行:

/**
 * Force le SSL
 */
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';

0

只需在wordpress的.htaccess文件中添加或替换此代码

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

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

# END WordPress

0

从http重定向到https:// www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

这肯定可以工作!


-1

只需添加以下代码,它将像charm一样工作:

<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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.