использовать https только для страницы входа, а не для всего сайта - PullRequest
4 голосов
/ 10 февраля 2011


я хочу открыть страницу входа в мой сайт только с https, а не на сайте comeplete. после авторизации (успешно) сайт снова запустится на http.

В настоящее время моя главная страница входа - test_index.php, где я включил test_header.php

мой основной код на test_header.php -

if($_SERVER['SERVER_PORT'] != 443) {
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
   exit();
}

но это делает полный веб-сайт в https
я также прочитал здесь , что это возможно через .htaccess, поэтому я удалил приведенный выше фрагмент кода из test_header.php и добавил следующие строки в файл .htaccess и

<IfModule mod_rewrite.c>
  RewriteEngine on
  # 301 redirect to domain to 'www.'
  RewriteCond %{HTTP_HOST} ^testweb.com$ [NC]
  RewriteRule ^(.*)$ http://www.testweb.com/$1 [R=301,L]
</IfModule>

<FilesMatch test_index.php>
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</FilesMatch>

Примечание: testweb.com - это воображаемое имя, а не реальный веб-сайт

но сайт все еще работает на https, пожалуйста, скажите мне, где я делаю ошибку ??

Редактировать

@ webbiedave, пожалуйста, проверьте мой обновленный код , это правильно ??

if ($_SERVER['REQUEST_URI'] == '/test_index.php') { // only check https on login
    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
        exit();
    } else {
        die("Sorry,Your website is not secure");        
    }
} elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
        // header("HTTP/1.1 301 Moved Permanently");
        header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
        exit();
}

Спасибо

1 Ответ

4 голосов
/ 10 февраля 2011

Не проверяйте номер порта для проверки https, поскольку это не невозможно - хотя и крайне маловероятно - для https находиться на нестандартном порту. Скорее проверьте $_SERVER['HTTPS'] переменную:

if ($_SERVER['REQUEST_URI'] == '/login.php') { // only check https on login
    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
        // do login stuff
    } else {
        // redirect to https or simply give an error
    }
} elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
    // redirect to http
}
...