Короткая ссылка на http из https (и наоборот) с использованием относительных ссылок
Когда я нахожусь в защищенной части веб-сайта, который я разрабатываю (вводя конкретную страницу или папку с помощью https), относительные ссылки на обычные страницы автоматически преобразуются в https.
Есть ли способ сообщить <a> чтобы всегда использовать протокол http вместо протокола https (или наоборот)?
Я знаю, что это просто, используя полную ссылку (http://www.mysite.com/index.html или https://www.mysite.com/index.html), но я бы хотел, чтобы он работал с относительными ссылками (index.html,../index.html и т.д.).
Ответы
Ответ 1
Мы используем 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
Ответ 2
Вы можете сделать все ваши внутренние ссылки независимыми от протокола, используя следующий синтаксис:
<a href="//some/file/on/your/domain.php">link text</a>
вместо
<a href="some/file/on/your/domain.php">link text</a>
//
сделает ссылку уважением к любому протоколу, на который была загружена страница.
Ответ 3
Не уверен, что это именно то, что вы искали, но если вы используете 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-протокол.
Ответ 4
Похоже, вы хотите использовать элемент BASE.
Невозможно "указать" Anchor использовать определенный протокол или нет, по крайней мере, без использования элемента BASE в HEAD этой страницы.
Есть ли причина, по которой вы хотите использовать относительные ссылки по абсолютным ссылкам? В этой статье говорится о ловушке использования относительных связей с HTTPS - потенциальной возможностью индексации вашего сайта и т.д.
Ответ 5
Нет способа сделать это с относительными гиперссылками, так как вы используете другой протокол, это ничем не отличается от привязки к местоположению ftp.