将 http 转发到 https 期望一个文件夹导致 mod_rewrite 错误 310

将 http 转发到 https 期望一个文件夹导致 mod_rewrite 错误 310

我的.htaccess

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=302,L]
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} /docs/ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=302,L]

将 http 转发到 https 有效(前两行)。

http://www.xyz.com -> https://www.xyz.com

文件夹 /docs/ 应该重定向到 http(第 3-5 行)

https://www.xyz.com/docs/ger/abc/1.html ->  http://www.xyz.cm/docs/ger/abc/1.html

但是我收到错误 310 (net::ERR_TOO_MANY_REDIRECTS) - 似乎我产生了一个无限循环,但是我该如何修复我的错误呢?

R=302 仅用于测试,最终将被 R=301 取代

答案1

你陷入了无限循环。你需要一个条件来专门忽略docs端口 80 上的文件夹:

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} ! /docs/ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=302,L]

不过我要提醒你:如果你在同一个页面中混合使用 http 和 https,所有浏览器都会抛出大警告。不过,如果你只从一个链接到另一个,那就没问题了。

一如既往,在 Apache 中重定向、更改 URL 或将 HTTP 重定向到 HTTPS - 您想了解但又不敢问的有关 Mod_Rewrite 规则的一切http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

相关内容