Mod rewrite mod_重写安全重定向

Mod rewrite mod_重写安全重定向,mod-rewrite,Mod Rewrite,试图将非安全页面重定向到安全页面时,mod_rewrite遇到了麻烦。这项工作: RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} (help/returns) RewriteRule .? https://mysite.localhost/%1/ [R=301,L] 但这并不是: RewriteCond %{SERVER_PORT} 80 RewriteCond %{HTTP:Host} (mysite.localhost|

试图将非安全页面重定向到安全页面时,mod_rewrite遇到了麻烦。这项工作:

RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} (help/returns) 
RewriteRule .? https://mysite.localhost/%1/ [R=301,L]
但这并不是:

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{HTTP:Host} (mysite.localhost|mylivesite.com)
RewriteCond %{REQUEST_URI} (help/returns) 
RewriteRule .? https://%1/%2/ [R=301,L]
它试图给我的URL是

我似乎无法使HTTP:host进入最终的重写规则行

我需要在那里的主机,以便我可以使用本地开发和实时部署相同的文件

非常感谢您的任何意见。

您可以使用以下规则:

RewriteCond %{HTTPS} =off
RewriteRule ^help/returns https://%{HTTP_HOST}%{REQUEST_URI} [QSA,R=301,L]
  • 此规则将所有请求重定向到
    http://example.com/help/returns
    到安全(HTTPS)位置:
    https://example.com/help/returns
    ——它将保留完整的URL路径+查询字符串。您有太多的条件,规则变得复杂,当您的服务器非常繁忙时(正则表达式非常昂贵),这不是一件好事

  • 我已经用更合适的
    %{HTTPS}=off
    替换了
    %{SERVER\u PORT}80
    (如果您的站点在非默认端口80上运行,这尤其有用)

  • 我还删除了HTTP_主机匹配部分——除非您将多个域名/子域绑定到同一个站点,否则您并不真正需要它。如果您需要此条件,只需在第1行之后添加此行:
    RewriteCond%{HTTP_HOST}^(mysite.localhost | mylivesite.com)


  • 非常感谢懒人。我没有意识到将HTTP_主机放在最终“目的地”是可能的(我使用端口80而不是HTTPS=off,因为我有一个SSL卸载负载平衡器,它不使用443进行安全页面-它使用8080)@Geoff在你将我的答案标记为接受之前,请确保规则对你适用(我确信我的规则是正确的——我已经测试过了,但您的设置可能略有不同,可能需要稍微调整一下,但可能性非常小)。