HTTPS авторизация и регистрация

Периодически в личных сообщениях у меня интересуются можно ли с помощью плагина «HTTPS Detect» сделать так, чтобы авторизация и регистрация на сайте осуществлялись по HTTPS протоколу, а дальнейшая работа — по HTTP (а некоторые готовы даже платить деньги). В принципе, плагин в данном случае играет вспомогательную роль поддержки HTTPS протокола, а непосредственно для решения задачи необходимо выполнить следующие действия:
1) изменить все ссылки на страницы "/login" и "/registration" на HTTPS версию (независимо от протокола входа), а ссылки на остальные страницы — на HTTP версию;
2) организовать переадресацию со страниц "/login" и "/registration" на HTTPS версию, а со всех остальных страниц — на HTTP версию;
3) заблокировать работу AJAX авторизации и регистрации.

Для изменения ссылок необходимо заменить функцию GetPath в файле "/engine/classes/Router.class.php" на следующий код:
	static public function GetPath($action) {
		// Если пользователь запросил action по умолчанию
		$sPage = ($action == 'default')
			? self::getInstance()->aConfigRoute['config']['action_default']
			: $action;

		// Смотрим, есть ли правило rewrite
		$sPage = self::getInstance()->Rewrite($sPage);
		$sRootWeb = Config::Get('path.root.web');
		if ($action == 'login' || $action == 'registration') $sRootWeb = str_replace('http://', 'https://', $sRootWeb);
		else $sRootWeb = str_replace('https://', 'http://', $sRootWeb);
		return rtrim($sRootWeb,'/')."/$sPage/";
	}


Переадресацию можно реализовать с помощью файла ".htaccess", настроек nginx или путем замены функции «ParseUrl» в файле "/engine/classes/Router.class.php" на следующий код:
	protected function ParseUrl() {
		$sReq = $this->GetRequestUri();
		$aRequestUrl=$this->GetRequestArray($sReq);
		$aRequestUrl=$this->RewriteRequest($aRequestUrl);

		self::$sAction=array_shift($aRequestUrl);
		self::$sActionEvent=array_shift($aRequestUrl);
		self::$aParams=$aRequestUrl;

		$bHttps = Config::Get('plugin.httpsdetect.https');
		$sUrl = self::$sPathWebCurrent;
		if ((self::$sAction == 'login' || self::$sAction == 'registration') && !$bHttps) {
			$sUrl = str_replace('http://', 'https://', $sUrl);
			func_header_location($sUrl);
		} elseif (self::$sAction != 'login' && self::$sAction != 'registration' && $bHttps) {
			$sUrl = str_replace('https://', 'http://', $sUrl);
			func_header_location($sUrl);
		}
	}


Блокировка AJAX версии авторизации и регистрации необходима, поскольку генерируются разные значения LIVESTREET_SECURITY_KEY. В шаблонах «Synio» и «Developer» для этого необходимо в файлах шаблона («header_top.tpl» и «footer.tpl») удалить у ссылок на регистрации и авторизацию назначение классов «js-registration-form-show» и «js-login-form-show».

Для плагина «HTTPS Detect» можно отключить коррекцию изображений и видео в тексте (установить параметры $config['correct_img_src'] и $config['correct_video_src'] в значение false).
Предлагаем профессиональное оборудование для сетей, в частности коммутаторы Cisco Catalyst 6500.

5 комментариев

avatar
Неясно, в каких случаях может понадобиться такое половинчатое решение. Если сервер поддерживает https, почему бы не перейти на него полностью?
avatar
HTTP и HTTPS с точки зрения поисковиков воспринимаются как 2 разных сайта.
avatar
Яндекс так не считает, подозреваю, что и Гугл тоже. Но мой вопрос заключался в другом.
Сформулирую вопрос иначе — почему бы не отказаться от http, если есть возможность пользоваться https?
avatar
Как раз таки яндекс точно сбросил ТИЦ у человека, писавшего мне в личку. Грешил именно на появление HTTPS версии. С учетом встреченных утверждений о приоритете HTTPS версии для яндекса (и автоматическом выбирании HTTPS в качестве основной версии сайта), я лично допускаю такую возможность.

Но я лично согласен, что лучше ограничиться одной HTTPS версией, для меня был вопрос из серии «получится ли». Получилось. :)
avatar
Подтверждаю.
6 числа ТИЦ вернулся для https, который был на http.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.