Apache htaccess重定向到https仅在文件存在时有效

Apache htaccess重定向到https仅在文件存在时有效,apache,.htaccess,redirect,https,Apache,.htaccess,Redirect,Https,我有一个安装了SEO重定向插件的wordpress站点。这是因为我改变了网站,我不得不重新编辑一些旧页面 一切正常。然后,我还安装了SSL,并更改了htaccess,以便从http重拨到https。这是文件(如您所见,我已经测试了不同的解决方案): #重新启动引擎 #重写基/ #重定向301/implantologia.htmlhttps://www.mysite.it/implantologia/ #开始GD-SSL 选项+FollowSymLinks 重新启动发动机 重写cond%{HTTP

我有一个安装了SEO重定向插件的wordpress站点。这是因为我改变了网站,我不得不重新编辑一些旧页面

一切正常。然后,我还安装了SSL,并更改了htaccess,以便从http重拨到https。这是文件(如您所见,我已经测试了不同的解决方案):

#重新启动引擎
#重写基/
#重定向301/implantologia.htmlhttps://www.mysite.it/implantologia/
#开始GD-SSL
选项+FollowSymLinks
重新启动发动机
重写cond%{HTTPS}=在…上
#重写cond%{SERVER\u PORT}^443$
#重写条件%{HTTP_用户_代理}^(+)$
#重写规则^$https://www.mysite.it/$1[R=301,L]
RewriteCond%{SERVER\u NAME}^mysite\.it$[NC]
重写规则。*https://%{SERVER_NAME}%{REQUEST_URI}[R=301]
标题添加严格的传输安全性“最大年龄=300”
#结束GD-SSL
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
这就是现在正在发生的事情:

  • 如果我使用http检查现有文件,一切正常,用户被重定向到https

  • 如果我使用HTTPS检查一个不存在的文件,那么我的SEO重定向插件会重新发送请求,一切正常

  • 如果我检查一个不存在的文件(例如使用HTTP连接到mysite.it的旧外部链接),浏览器中的url将保持不变,并且会出现404错误。但是如果我重新发送请求,它会工作,我会转到正确的页面

最后,如果你点击一个旧的http链接,你会得到一个404错误。但是,在开始在站点上导航后,您将永远不会再遇到此问题。我有一个404错误的日志,它充满了我无法看到的错误。。。直到我开始匿名浏览

那么,这是一个什么样的问题?有一种缓存吗?为什么它不只是第一次使用?如果请求的文件不存在,为什么htaccess不重定向到https


提前感谢您的帮助。

您正在使用插件、重写和STS(严格传输安全)来处理重定向到https的问题??所有这些加在一起可能会引起奇怪的问题。STS的本质是将http重定向到https,以符合用户代理的要求。我将首先删除所有插件,STS和rewrite,然后添加一个,看看它是否正常工作。亲爱的@PanamaJack,我没有使用任何插件。我只在可以找到STS字符串的地方使用htaccess。然而,当我安装SSL时,GoDaddy自动对我的帐户进行了一些更改。你可能是对的,但我不知道从哪里开始调查。你正在使用插件、重写和STS(严格传输安全)来处理重定向到https??所有这些加在一起可能会引起奇怪的问题。STS的本质是将http重定向到https,以符合用户代理的要求。我将首先删除所有插件,STS和rewrite,然后添加一个,看看它是否正常工作。亲爱的@PanamaJack,我没有使用任何插件。我只在可以找到STS字符串的地方使用htaccess。然而,当我安装SSL时,GoDaddy自动对我的帐户进行了一些更改。你可能是对的,但我不知道从哪里开始调查。
# RewriteEngine On
# RewriteBase /
# redirect 301 /implantologia.html https://www.mysite.it/implantologia/

# BEGIN GD-SSL
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} !=on
# RewriteCond %{SERVER_PORT} !^443$
# RewriteCond %{HTTP_USER_AGENT} ^(.+)$
# RewriteRule ^$ https://www.mysite.it/$1 [R=301,L]
RewriteCond %{SERVER_NAME} ^mysite\.it$ [NC]
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
Header add Strict-Transport-Security "max-age=300"
</IfModule>
# END GD-SSL

# 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