我不想让客户端解析 URL,而是让我的网络服务器这样做。所以理想情况下,我可以这样:
<a href="http://www.long-domain-name.com/">
进入这个:
<a href="http://domain/">
通过在我的 /etc/hosts 文件中添加一个条目,或者 DNS 魔术,或类似的东西。我正在运行 nginx。我有什么办法可以做到这一点?
谢谢!
我不想让客户端解析 URL,而是让我的网络服务器这样做。所以理想情况下,我可以这样:
<a href="http://www.long-domain-name.com/">
进入这个:
<a href="http://domain/">
通过在我的 /etc/hosts 文件中添加一个条目,或者 DNS 魔术,或类似的东西。我正在运行 nginx。我有什么办法可以做到这一点?
谢谢!
您似乎将“资格”与“分辨率”混淆了。
解决方法是将名称转换为 IP 地址。客户绝对需要这样做。避免这种情况的唯一方法是使用 IP 地址创建 URL,如下所示:
http://127.0.0.2/
但这通常是个坏主意,而且在许多情况下是行不通的。资格正在扩大
http://example/
到http://www.example.com/
。这在技术上也需要由客户完成。但是,如果您只想避免输入长名称,则可以使用服务器端包含将较短的内容扩展为完整的 URL。丑陋的黑客,但可行。如果您绝对不能忍受输入长 URL 的想法,可能最合乎逻辑的解决方法是编写一个 Makefile,通过 sed 运行您的源 HTML 以将短版本转换为长版本。
正如其他人所说,您无法更改 DNS 解析。它发生在您的网络服务器完全参与之前。如果您只想为同一个域提供更短的 URL,您可以使用 Apache 和 mod_rewrite。
例如,我自动将所有我的“example.com”重定向到“www.example.com”。您可以轻松接受对“mydomain.com”的所有请求并将其扩展为“www.my-domain-which-has-a-very-long-name.com”。
显然,您必须为“mydomain.com”和“my-domain-which-has-a-very-long-name.com”注册和设置 DNS记录。
无论如何,客户端仍然必须能够解析 DNS。
解决它的唯一方法是,如果您的代码或其他东西物理地抓取页面本身,然后将其作为自己的页面发送给客户端。
这听起来像是通常由反向代理完成的事情。
考虑这个设置:
规范的解决方案是 Apache 的mod_proxy,但我相信 nginx 也可以做到这一点。
如果 www.long-domain-name.com URL 位于 www.long-domain-name.com 提供的页面中,那么您甚至不需要指定域。所有浏览器都会从它来自的同一站点获取不合格的链接。
即使用相对于站点的 URL 而不是绝对的 URL 并替换:
和:
无论如何,这样做是个好主意,因为它可以很容易地将站点移动到不同的域名。强烈推荐,几乎是必不可少的,如果你想要像“dev.long-domain-name.com”->“testing.long-domain-name.com”->“www.long-domain-”这样的三阶段部署名称.com"
在任何 Web 开发中,一个好的经验法则是尽可能避免使用绝对 URL。