如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章