如何使 htaccess 在表单提交时不重定向到 http

如何使 htaccess 在表单提交时不重定向到 http

我的 .htaccess 文件的一部分强制https打开某些页面(例如,当用户登录、输入信用卡信息等时),同时强制http打开所有其他页面。这似乎是我需要的理想设置。

但是,我的网站扩展程序之一负责生成信用卡处理表单。在表单的操作 URL 中,它包含httpsWeb 根目录的 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 浏览器缓存的担忧似乎毫无根据也一样。

我最讨厌的是:根据手册

相关内容