Apache htaccess将所有URL重定向到https,除了带有各种参数的特定URL



我想将所有不安全的url重定向到HTTPS,除了包含各种参数的自定义url。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/code-validator/?code=
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

所以http://example.com/code-validator/?code=123或者此url上的任何参数都不会重定向到HTTPS。

使用THE_REQUEST而不是REQUEST_URI可以:

  1. 匹配查询字符串,因为REQUEST_URI只匹配URI而不匹配查询字符串
  2. 获取Apache收到的未修改的原始URL的访问权限

您的规则可以是:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{THE_REQUEST} !/code-validator/?code= [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

请确保将此规则保留为最重要的规则,并清除旧的浏览器缓存。

最新更新