使用.htaccess将HTTP重定向到HTTP

Cri*_*aia 75 wordpress .htaccess https redirect http

请不要向我推荐超过173个upvotes 的长而非常详细的帖子.它对我不起作用.我还尝试了许多其他(1,2,3,4).他们都给我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>
Run Code Online (Sandbox Code Playgroud)

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

  • 高级自定义字段
  • All In One SEO Pack
  • 波普搜索框项目类型为导航菜单
  • 联系表格7
  • 禁用评论
  • Google XML Sitemaps
  • Jetpack by WordPress.com
  • 搜索和过滤
  • 滑块WD
  • TablePress
  • UpdraftPlus - 备份/恢复
  • Wordfence安全
  • 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>
Run Code Online (Sandbox Code Playgroud)

结果: 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>
Run Code Online (Sandbox Code Playgroud)

结果: 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>
Run Code Online (Sandbox Code Playgroud)

结果: 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>
Run Code Online (Sandbox Code Playgroud)

结果: 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>
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*hah 139

在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>
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于普通的非Dreamhost服务器 (7认同)
  • 没有必要指出这个工作的每个主机!它是.htaccess的简单代码,因此它应该适用于大多数系统,它们接受.htaccess.如果它不起作用,那是因为奇怪的情况. (3认同)
  • 这适用于siteground wordpress安装. (2认同)

Cri*_*aia 89

问题解决了!

最终.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>
Run Code Online (Sandbox Code Playgroud)

  • 对于我在Dreamhost上托管的域名,此更改导致"[www.domain.com]重定向您太​​多次".没运气.但是,这有效:RewriteCond%{HTTPS}!=在RewriteRule上^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301] (19认同)
  • 我不得不将`RewriteCond`更改为以下一个以避免`太多重定向':`RewriteCond%{HTTPS}!= on` (11认同)
  • 这是唯一一个对我有用的解决方案.(测试太多了.)"ENV:"至关重要.从回复和其他解决方案来看,似乎在某些主机上你要么必须包括**,而在其他主机上,你必须将它排除在外**.BTW对于任何想要使用它的人,考虑使用`R = 301`而不仅仅是'R`(这意味着302重定向). (3认同)

小智 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
Run Code Online (Sandbox Code Playgroud)


Hüs*_*ğlı 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>
Run Code Online (Sandbox Code Playgroud)

这样,如果某些设置发生变化,您的线条不会被wordpress弄乱.此外,该<IfModule>部分可以毫无问题地重复.

我要感谢Jason Shah的整洁htaccess规则.


归档时间:

查看次数:

161761 次

最近记录:

6 年,7 月 前