gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:12:22 24 4
gpt4 key购买 nike

个人网站总是首选在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com