重定向至:HTTPS不支持.htaccess

时间:2018-08-07 作者:Best Dev Tutorials

我的.htaccess 文件,但我仍然可以通过http:

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

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

# END WordPress
知道我做错了什么吗?

2 个回复
最合适的回答,由SO网友:MrWhite 整理而成

你把代码放错地方了。HTTP-to-HTTPS指令必须在WordPress前端控制器之前执行,否则除了直接文件请求之外,它永远不会得到任何处理。

您的自定义指令也应该在# BEGIN WordPress 块,否则WordPress本身可能会在将来的更新中覆盖您的指令。

例如:

# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

# 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
这是“重定向”,而不是“重写”。更改RR=301 当您确定它工作正常时(因为这最终应该是一个永久重定向)。

SO网友:firxworx

您是否熟悉[L] mod\\u重写的标志?它“导致mod\\u rewrite停止处理规则集。在大多数上下文中,这意味着如果规则匹配,则不会处理进一步的规则”。

请参见:https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l

请注意,http->https规则上方的重写规则使用此标志。这些规则看起来像WordPress的规则,将不针对特定文件或目录的请求重定向到index.php 用于搬运。

一个想法是改变顺序,这样你的规则就会出现在Rewrite Engine On 因此,首先执行http vs https检查,可以进行重定向,然后对以下重定向请求(现在将是https)应用以下与WordPress功能相关的规则集。

你也可以试着写RewriteCond {HTTPS} != onRewriteCond %{HTTPS} off 还有你的RewriteRule 线路组件RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 更明确地说,返回http 301(永久)重定向状态代码。

编辑:我刚刚看到怀特先生的评论,我们正在同一时间写作。他也有很好的建议:把你修改过的规则放在#WORDPRESS评论栏之外,这样以后WORDPRESS的更新就不会影响它们了!

结束