Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅在具有.htaccess的特定页面上使用HTTPS_Php_.htaccess_Ssl_Redirect - Fatal编程技术网

Php 仅在具有.htaccess的特定页面上使用HTTPS

Php 仅在具有.htaccess的特定页面上使用HTTPS,php,.htaccess,ssl,redirect,Php,.htaccess,Ssl,Redirect,我有一个URL,比如http://www.domain.com/index.php?p=register。我想将其重定向到使用HTTPS(SSL)和.htaccess,但仅限于此,以及其他几个页面(登录页面等),而不是整个站点。URL不指向目录,但用于动态包含不同的文件 有人能给我一个指针或一个例子,如何获得一个单一的页面重定向到HTTPS请 谢谢。像这样的方法应该可以: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteCond

我有一个URL,比如
http://www.domain.com/index.php?p=register
。我想将其重定向到使用HTTPS(SSL)和.htaccess,但仅限于此,以及其他几个页面(登录页面等),而不是整个站点。URL不指向目录,但用于动态包含不同的文件

有人能给我一个指针或一个例子,如何获得一个单一的页面重定向到HTTPS请


谢谢。

像这样的方法应该可以:

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{QUERY_STRING} (^|&)p=(register|login|or|other|protected|page)($|&)
RewriteRule (.*) https://www.domain.com/index.php [R=301,QSA,L]
一些解释:

  • 检查服务器端口是否与443(安全连接的标准端口)不同,以确保只重定向非安全连接
  • 查询字符串(后面的所有内容?)必须匹配模式:包含p变量,该变量具有管道分隔列表中的一个值
  • 将所有内容重定向到安全域,发送301响应状态,附加所有查询字符串并标记为最后一个规则,因此不会解析此规则下面的任何规则(因为这是重定向,我们不想采取任何其他操作)

  • 不是htaccess,但另一种方法是使用PHP重定向:

    <?php
    
    $redirectlist = array('register','login','myaccount');
    
    if (in_array($_GET['p'], $redirectlist) && strtolower($_SERVER['HTTPS']) != 'on') {
        exit(header("location: https://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"));
    }
    
    ?>
    

    如果您可以选择使用php方法,我建议您使用该方法或任何其他动态语言。您必须避免使用htaccess,因为该页面上指向图像、js和其他联系人的链接将被强制为非SSL,并且现代浏览器将显示一个不合规标志,这可能会掩盖您的SSL成本。

    如果只有登录和注册页面使用安全连接,任何嗅探连接的人仍然可以从纯文本连接中窃取登录令牌。@Rosh-它们仅作为示例提供。我想要一段通用的.htaccess代码,以便添加重定向到HTTPS的页面列表。感谢您的帮助,但它拒绝重定向:-(我的错误重写规则适用于路径,而不是查询字符串。请参阅我的更新答案,它是有效的。我实际上已经采用了这种方法而不是.htaccess one-谢谢。现在我只需要为自己购买一个有效的SSL证书!:-p太好了。:)我没有能力在我的一些工作网站上操纵htaccess,所以这对我来说一直很有效。你介意投票并选择它作为答案(计票下的复选标记)吗?当然不!我本来打算,但没有时间或其他东西:-P