我正在使用以下脚本将所有发送到 HTTP 的请求重定向到 HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
我需要为该规则添加例外(针对特定页面),因为它正在加载位于没有 HTTPS 的服务器上的 JS。在 FF、Chrome 中,它可以正常工作。在 IE 中,它会显示令人讨厌的警告。
关于如何向现有的 mod_rewrite 代码添加规则有什么想法吗?
答案1
您可以添加第二个RewriteCond
带有否定测试的测试(在模式前加上!
)。它将与您现有的 进行 AND 运算RewriteCond
。
编辑:
例子:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/pageregex
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
pageregex
描述您想要例外处理的页面的某个正则表达式在哪里。请注意,正则表达式可以只是一个唯一标识特定页面的固定字符串。
答案2
如果您已正确安装和配置 mod_proxy,您也可以通过 https 提供该 .js 文件。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/pageregex
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [C]
RewriteRule ^/home/to/js/file.js http://example.com/home/to/js/file.js [P]
[C] 标志允许执行以下规则,就像它是第一个重写规则的一部分一样。[P] 标志告诉 mod_rewrite 使用 mod_proxy 获取指定的 .js 文件并以透明方式提供该文件。这可能会使 IE 停止发出“同一页面上有安全和不安全的内容,您要继续吗?”的警告,因为 .js 文件将以安全方式提供。