Как сделать так, чтобы сайт на PHP работал как по HTTP, так и по HTTPS? - PullRequest
0 голосов
/ 18 сентября 2011

У меня есть веб-сайт, на котором написано, что http: // - это единственный протокол навсегда.Теперь я купил сертификат SSL, но когда я захожу на сайт, звоня по https: // я получаю информацию в браузерах, что часть сайта небезопасна.Как я обнаружил, у меня есть некоторые JS, CSS, а также изображения и файлы, на которые я ссылаюсь, используя http: // в HTML-коде сайта.

Так, что является наилучшей практикой для включения полного https?Должен ли я менять свой веб-сайт в любом месте, когда я ссылаюсь на изображение, CSS или JS, проверять, загружен ли сайт с http или https, и загружать ресурс по соответствующему протоколу?Похоже, для меня много работы и немного подвержены ошибкам.Есть ли другой способ, проще сделать весь сайт полностью безопасным?

Ответы [ 4 ]

3 голосов
/ 18 сентября 2011

Вместо того, чтобы ссылаться на ваши css, js и изображения с http://yoursite.com/css/file.css, просто используйте относительные пути, такие как /images/image.jpg и /css/file.css, таким образом, он будет работать как с http, так и с https. Кроме того, если вы меняете домены или копируете свой контент в другой домен, вам также не нужно менять все эти ссылки.

1 голос
/ 18 сентября 2011

В дополнение к ответу @ drew010, вы можете использовать другие домены и по-прежнему ссылаться на текущий протокол с //, что-то вроде:

<img src="/pics/home.png" />
<img src="//my-cdn.com/pics/info.png" />

Последний пример будет указывать на https://.. изhttps://your-site.com и http://... от http://your-site.com.

1 голос
/ 18 сентября 2011

Используйте относительные пути. Если вы указываете на то, что находится на том же сайте, что и ваш, вам не следует использовать http://

Если по какой-то причине вам все еще нужно иметь http: //, просто переключите их все на https: //. Http: // никогда не будет жаловаться, потому что он указывает на вещи https: //, а страница https: // будет жаловаться, если он указывает на вещи, отличные от https.

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

0 голосов
/ 18 сентября 2011

Лучше всего использовать относительный путь, а не абсолютный, но иногда абсолютный вариант лучше, поэтому вы можете сделать следующее:

, как я могу себе представить, у вас есть файл с именем config.php или common.php (файл, в котором хранятся ваши общие используемые переменные, и вы включаете его в каждую страницу), поэтому поместите этот код туда:

function selfURL() {
$s = empty($_SERVER["HTTPS"]) ? '' 
    : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
}

function strleft($s1, $s2) {
return substr($s1, 0, strpos($s1, $s2));
}

, а затем вы можете назначить переменную с именем $http, чтобы получить значениетакая функция, как: <code>$http = selfURL(); , а затем всякий раз, когда вы хотите включить что-либо, например изображения, CSS, и т. д. сделать что-то вроде:
<img src="<?=$http?>images/sample.png" />

этот метод надежен, так как он работает в любой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...