【问题标题】:Access website only by HTTP except for 2 pages仅通过 HTTP 访问网站,2 个页面除外
【发布时间】:2012-03-03 19:12:54
【问题描述】:

我需要帮助用户通过 HTTPS 访问我的网站。我只想让 2 个页面能够通过 HTTPS 访问。所有其他页面只能通过 HTTP 访问,如果用户尝试通过 HTTPS 访问该页面,它会将它们重定向到该页面的 HTTP 版本。我已经尝试了几个 .htaccess 文件,但似乎无法让它们中的任何一个工作。

非常感谢任何帮助!

【问题讨论】:

  • 您希望通过 https 访问的页面名称是什么?
  • 它们是:enroll.php & Registered.php

标签: .htaccess seo


【解决方案1】:

将此添加到.htaccess 文件中,并将其放在您目录的DocumentRoot 中。

RewriteEngine on
RewriteBase /

Rewritecond %{REQUEST_URI} (?:(?:enroll|Registered)\.php)$ [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [L,R=301]


RewriteCond %{HTTPS} on
Rewritecond %{REQUEST_URI} !(?:(?:enroll|Registered)\.php)$ [NC]
RewriteRule ^(.*) http://%{HTTP_HOST}/$1 [L,R=301] 

启用重写记录:

RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9

将以上 3 行放入您的virtualhost。重启httpd。

RewriteLogLevel 9 使用较高的 Level 值会显着降低 Apache 服务器的速度!使用级别大于 2 的重写日志文件仅用于调试! 级别 9 将记录几乎所有重写日志的详细信息。

执行find / -name httpd.conffind / -name apache.conffind / -name apache2.conf 以查找您的conf 文件的位置。通常在:/etc/httpd/conf

您在哪里添加了 SSL 设置? SSLCertificateFileSSLCertificateKeyFileSSLCertificateChainFile

【讨论】:

  • 感谢您的帮助。好的,我刚刚尝试了这个规则,当我尝试通过 HTTPS 通过将用户重定向到 HTTP 版本来访问页面时,它可以工作。但是,当我尝试访问 HTTPS 页面 (enroll.php) 时,它说我的 SSL 证书无效。你知道它为什么会这样做吗?谢谢
  • 您有HTTPS://whateveryourdomainis/ 的注册证书吗?您必须为此支付现金,并向您的托管服务提供商注册(或者只需支付您的托管服务提供商代表您执行此操作)。
  • @ThinkingMonkey 是的,我愿意。我有一个 SSL 证书,它会在我不使用您的代码时进行验证。但是,当我使用您的代码时,它会在 url 栏中通过 HTTPS 显示红色 x。有什么建议吗?
  • @three3 您的意思是说您的网站已连接?但是通过 HTTPS 的红色 X 出现在 URL 栏中?
  • @three3 你是否有权访问 Apache 的 .conf 文件。
【解决方案2】:

几种不同的方式:

  1. 您可以在 2 个页面(enroll.phpRegistered.php)中放置一些逻辑以重定向到 HTTPS。

    if ($_SERVER['HTTPS']!=”on”)
    {
        $redirect= “https://”.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header(“Location:$redirect”);
    }
    
  2. 假设您使用的是 Apache Web 服务器(包括 IIS 在内的其他 Web 服务器与重定向机制非常相似),您可以使用模式匹配,并且对于这两个 URL,指定重定向到 HTTPS。

    RewriteEngine On
    RewriteCond %{HTTPS} !on
    RewriteRule (enroll.php) https://%{HTTP_HOST}%{REQUEST_URI}
    RewriteRule (Registration.php) https://%{HTTP_HOST}%{REQUEST_URI}
    

【讨论】:

  • 我明白这一点,我知道有办法做到这一点,只是不知道该怎么做。
  • @WebUser 您的重写器将无法正常运行。
  • @ThinkingMonkey,你可能对重写模块有更好的处理。
  • @WebUser,这部分适用于我。当用户访问我的enroll.php 页面时,HTTPS 是有效且正确的。但是,它不会阻止用户通过 HTTPS 访问我的任何其他页面。有什么帮助吗?
  • 如果你想走 rewrite/.htcaccess 路线,请参考上面@ThinkingMonkey的回答。我相信他的回答更完整。
猜你喜欢
  • 2018-05-19
  • 2020-11-10
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多