http - 如何在 anchor 中指定协议(protocol)并仍然使用相对路径?

标签 http https uri anchor href

个人网站总是首选在 anchor 中使用相对路径,这样您就可以轻松地将目录结构移动到新网站,但我想使我网站的一部分受到密码保护(使用 .htaccess),因此使用https。有没有一种方法可以在 anchor 的 href 中指定不同的协议(protocol)而无需也对 www.domain.com 进行硬编码?

例子:

<a href="/student/example">Link</a>

我想把它变成这样的东西:

<a href="https: /student/example">Link</a>

以上显然行不通。有什么办法吗?我试图避免任何脚本编写,但比 PHP 或 ASP 更喜欢 JavaScript。

最佳答案

如果不依赖 Javascript 动态更改 href,您就无法做到这一点。 RFC 3986 Section 5.2.2 中描述了将相对 URI 转换为绝对 URI 的方式。 :

if defined(R.scheme) then
   T.scheme    = R.scheme;
   T.authority = R.authority;
   T.path      = remove_dot_segments(R.path);
   T.query     = R.query;
else
   if defined(R.authority) then
      T.authority = R.authority;
      T.path      = remove_dot_segments(R.path);
      T.query     = R.query;
   else
      if (R.path == "") then
         T.path = Base.path;
         if defined(R.query) then
            T.query = R.query;
         else
            T.query = Base.query;
         endif;
      else
         if (R.path starts-with "/") then
            T.path = remove_dot_segments(R.path);
         else
            T.path = merge(Base.path, R.path);
            T.path = remove_dot_segments(T.path);
         endif;
         T.query = R.query;
      endif;
      T.authority = Base.authority;
    endif;
    T.scheme = Base.scheme;
  endif;
  T.fragment = R.fragment;

其中 R 是相对 URL,T 是目标。

上面基本上是说,如果在相对URI中指定了scheme,那么目标uri将是整个相对uri,所以指定scheme的唯一方法就是指定整个url。

如果您想使用基于 Javascript 的方法,您可以使用以下方法动态设置 href:a.href = 'https://' + window.location.host + a.getAttribute('href' )a 是您的 AnchorElement。

这是 Javascript 版本的演示: http://jsfiddle.net/7DWV5/

但是,主要是由于您遇到的原因,最好将您的主机名存储在配置文件中,或者从前端 Controller 中的 HTTP 请求 Host header 中检测它。这样您就可以在生成页面时将其模板化到您的 HTML 中。这使您不必在生成 URL 后使用客户端脚本来修复它们,这可能是可取的,因为并非每个人都启用了 Javascript。

关于http - 如何在 anchor 中指定协议(protocol)并仍然使用相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17055605/

相关文章:

http - MIME ParseMediaType 在多部分边界上失败

javascript - 在nodejs中模拟curl请求

PHP https 使用 cURL 发布 XML 数据

performance - 如何减少网站的SSL时间

php - 使用 uri 段获取值

java - 在不同的计算机上使用 HttpUrlConnection 会导致不同的效果吗?

java - 如何在 Java 中获取 URL 的 HTTP 响应代码?

ruby-on-rails-3 - Rails 3,从 https 重定向到 https,覆盖 _path 助手

Android 使用特定浏览器启动特定 url

wpf - 资源中字体的绝对 URI