Короткий способ ссылки на http из https (и наоборот) с использованием относительных ссылок - PullRequest
20 голосов
/ 25 февраля 2009

Когда я нахожусь в защищенной части веб-сайта, который я разрабатываю (вход на определенную страницу или папку с использованием https), относительные ссылки на страницы normal автоматически преобразуются в https как хорошо.

Есть ли способ указать тегу , чтобы он всегда использовал протокол http вместо протокола https (или наоборот)?

Я знаю, что легко использовать полную ссылку (http://www.mysite.com/index.html или https://www.mysite.com/index.html),, но я бы хотел, чтобы он работал с относительными ссылками (index.html, ../index.html и т. Д .).

Ответы [ 5 ]

29 голосов
/ 07 февраля 2010

Вы можете сделать все свои внутренние ссылки независимыми от протокола, используя следующий синтаксис:

<a href="//some/file/on/your/domain.php">link text</a>

вместо

<a href="some/file/on/your/domain.php">link text</a>

// заставит ссылку соответствовать любому протоколу, по которому была загружена страница.

10 голосов
/ 25 февраля 2009

Мы используем Apache mod_rewrite, чтобы контролировать, обслуживается ли страница через http или https. Вот пример фрагмента из корневого каталога сайта .htaccess:

# Redirect most reqests for https to http
RewriteRule ^https://www.example.com(.*) http://www.example.com$1 [R=301,NC]

# Allow some URIs to be https if requested
RewriteCond   %{SERVER_PORT}  ^443$
RewriteCond   %{REQUEST_URI}  !^/images/(.*)$
RewriteCond   %{REQUEST_URI}  !^/scripts/(.*)$
RewriteCond   %{REQUEST_URI}  !^/styles/(.*)$
RewriteCond   %{REQUEST_URI}  !^/store(.*)$
RewriteCond   %{REQUEST_URI}  !^/login.htm$
RewriteRule ^(.*) http://www.example.com/$1 [L,R]

# Force some URIs to be https only
RewriteCond   %{SERVER_PORT}  ^80$
RewriteRule ^store(.*) https://www.example.com/store$1 [L,R]

RewriteCond   %{SERVER_PORT}  ^80$
RewriteRule ^FormSanityKey.htm https://www.example.com/login$1 [L,R]

Читайте все об этом по адресу:

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

4 голосов
/ 25 февраля 2009

Не уверен, что это именно то, что вы искали, но если вы используете Apache, для этого есть способ: http://httpd.apache.org/docs/2.2/ssl/ssl_faq.html#relative

По сути, вы помещаете в файл конфигурации Apache следующее:

RewriteEngine on
RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L]
RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L]

затем добавьте :SSL к любой ссылке (на веб-странице), для которой вы хотите использовать HTTPS, и :NOSSL к любой ссылке, для которой вы хотите использовать обычный HTTP.

2 голосов
/ 25 февраля 2009

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

2 голосов
/ 25 февраля 2009

Звучит так, как будто вы хотите использовать элемент BASE .

Невозможно «сказать» привязке использовать определенный протокол или нет, по крайней мере без использования элемента BASE в заголовке этой страницы.

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

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