![将 http 转发到 https 期望一个文件夹导致 mod_rewrite 错误 310](https://linux22.com/image/610747/%E5%B0%86%20http%20%E8%BD%AC%E5%8F%91%E5%88%B0%20https%20%E6%9C%9F%E6%9C%9B%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E5%AF%BC%E8%87%B4%20mod_rewrite%20%E9%94%99%E8%AF%AF%20310.png)
我的.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