我的 .htaccess 文件的一部分强制https
打开某些页面(例如,当用户登录、输入信用卡信息等时),同时强制http
打开所有其他页面。这似乎是我需要的理想设置。
但是,我的网站扩展程序之一负责生成信用卡处理表单。在表单的操作 URL 中,它包含https
Web 根目录的 URL(例如https://domain.com/)。但是,Web 根目录不是 .htaccess 强制的那些页面之一https
,因此它强制重定向到http
。因此,扩展失败,因为表单试图提交到https
重定向到 的页面http
。
我该怎么办?我不希望用户在没有必要的情况下被迫查看安全页面;我宁愿他们享受缓存的好处。显然,在安全页面上,他们需要提交到安全 URL(我的网站的 CMS 显然以这样的方式工作,即所有提交到 Web 根目录的表单都可以正常工作)。我无法告诉扩展提交到不同的 URL。
这是我的.htaccess 的相关部分:
<IfModule mod_rewrite.c>
RewriteEngine On
# Define default protocol for all assets
RewriteRule ^ - [E=protocol:http,E=ssl:%{HTTPS}off]
# Define HTTPS targets, add more cond as required
RewriteCond $1 (payment|sign-in|sign-up) [NC]
RewriteRule (.*) - [E=protocol:https,E=ssl:%{HTTPS}on]
# Rewrite host if necessary and redirect on correct protocol
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ %{ENV:protocol}://%1%{REQUEST_URI} [L,R=301]
# Protocol switch if necessary (host is already correct)
RewriteCond %{ENV:ssl} ^(onoff|offon)
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$ [NC]
RewriteRule ^ %{ENV:protocol}://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Finally, process the internal redirect
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
也许可以将其修改为“如果是表单提交就不要重定向?”
答案1
我认为你通过严格强制某些页面使用 HTTPS 而其他页面使用纯 HTTP 来优化是错误的。只需将所有内容重定向到 HTTPS 即可完成。
这HTTPS 的计算成本在大多数情况下可以忽略不计。
您对 SSL 浏览器缓存的担忧似乎毫无根据也一样。
我最讨厌的是:根据手册。