如何使用 Apache 在特定页面上正确强制使用 HTTPS

Posted

技术标签:

【中文标题】如何使用 Apache 在特定页面上正确强制使用 HTTPS【英文标题】:How to properly force HTTPS on specific pages using Apache 【发布时间】:2011-09-07 06:12:07 【问题描述】:

我想强制我的注册页面使用 https,并允许使用 https 或 http 浏览所有其他页面(例如,http://www.example.com/signup 应该重定向到 https://www.example.com/signup)。我能够强制所有页面到 https,但不能只让一个页面重定向到 https。该页面只是作为 http 正常加载。

这是我尝试在我的 htaccess 文件中使用的代码:

RewriteEngine On
RewriteCond %SERVER_PORT 80
RewriteRule ^/signup(/.*)$ https://www.example.com/$1 [R=301,L]

为了它的价值(如果有我不知道的冲突),我还使用以下代码强制所有页面重定向到 www 并从 URL 中的文件名中删除 .php

RewriteEngine on
RewriteCond %HTTP_HOST ^([a-z.]+)?example\.com$ [NC]
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule .? http://www.%1example.com%REQUEST_URI [R=301,L]

RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php?/$1

对我做错了什么有什么想法吗?

【问题讨论】:

【参考方案1】:

你的 https 规则是这样的:

RewriteCond %SERVER_PORT =80
RewriteRule ^(signup/?)$ https://www.example.com/$1 [R=301,L,NC]

请记住,RewriteRule 中没有斜杠 /

【讨论】:

谢谢。不幸的是,这似乎不想在特定页面上强制使用 https(它保持为 http)。 @ken:以上规则只会在/signup/ URI 上强制https,但不会在例如:/signup/login.php URI 上这样做。您是否也是这种情况,/signup/ 被重定向到其他文件?您的 apache 的访问和错误日​​志也将帮助我进一步调查。 重定向到 https 的具体 URL 是 https://www.example.com/signup "Signup" 是一个 php 文件,但我使用 htaccess 从 url 中删除了 .php。错误日志中最近的唯一信息是:“PHP 警告:PHP 启动:无法加载动态库 '/opt/php53/lib/php/extensions/no-debug-non-zts-20090626/pdo_mysql.so' - / opt/php53/lib/php/extensions/no-debug-non-zts-20090626/pdo_mysql.so: undefined symbol: php_pdo_unregister_driver in Unknown on line 0。”

以上是关于如何使用 Apache 在特定页面上正确强制使用 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache Pig 上强制执行正确的数据类型?

如何在加载后强制 iFrame 重新加载

如何在支持 CSS3 的网站上支持更多的移动视口宽度并强制移动浏览器使用正确的宽度?

如何强制 html5 视频完全加载?

强制视图上的特定大小类

apache_conf 在所有WordPress页面上强制HTTPS