为什么我的网站在通过同一局域网内的另一台计算机访问时无法正确显示

为什么我的网站在通过同一局域网内的另一台计算机访问时无法正确显示

我在本地家庭网络上运行 Web 服务器 (Ubuntu)。我位于路由器后面。在 WAN 上我有一个直接 IP。当我不在我的家庭网络上并通过 WAN 直接 IP 访问我的网站时,我的网站可以正确显示,一切正常。

在路由器后面的家庭局域网上,通过 WAN 直接访问我的网站会让我进入路由器的管理员登录页面。这是正常的。但是...

从我家庭 LAN 上的另一台计算机访问我的网站(通过其家庭 LAN IP 地址)可以进入该网站,但布局显示已损坏,单击任何链接都会将我带到 WAN 直接 IP(我的路由器的管理员登录页面)。

当我从家庭局域网访问我的网站时,如何才能使它正确显示并且链接能够正常工作?

答案1

检查您的 CSS 和 JavaScript URL。您可能需要将它们从相对链接切换为绝对链接,因为根据您尝试访问网站的方式,URL 路由似乎有所不同。

最简单的方法是使用 Firebug 或开发人员工具(资源选项卡)查看浏览器尝试加载的资源。验证您的样式表是否正确加载(您应该能够选择它们并查看内容)。如果它们不在,或者您在资源选项卡上收到错误,请检查浏览器正在查看的 URL 并确保它是正确的 URL。

我敢打赌,您的浏览器正在您的 LAN IP 地址上寻找样式表,但它应该在 WAN IP 地址上寻找。

答案2

您的路由器无法正确执行“发夹式 NAT”。许多廉价家庭网关的 NAT 代码存在缺陷,无法正确执行此操作。

听起来您已经正确设置了路由器的端口映射(又名“端口转发”)或 DMZ(又名“默认主机”、“堡垒主机”等)功能,因为从路由器的 WAN 端,当您将浏览器指向路由器的公共 WAN IP 地址时,您会从 Web 服务器获取页面。

但是,如果您使用的是内部网络,当您连接到路由器的公共 WAN IP 地址时,您仍应获得 Web 服务器的页面,而不是路由器的管理页面。如果您的路由器希望在您连接到其 NAT 私有 IP 地址上的端口 80 时提供其管理页面,那没问题。但不能在公共 WAN IP 地址上提供。

当你在 NAT 私有端的客户端上尝试通过其 NAT 私有 IP 地址直接访问 Web 服务器时,它可能会根据类似“http://192.168.0.254/“,但当浏览器加载 CSS 文件和图片时,它可能会形成类似“http://mydomain.com/styles.css“,这意味着您的路由器的公共 WAN IP 地址,由于您的路由器有问题,这意味着您的路由器的管理 Web 服务器本身正在拦截这些请求,并且它没有这些资源,因此会出现问题。

答案3

您需要的是相对链接,而不是绝对链接。因此,不要在您的 html 中像这样:

<link rel="stylesheet" type="text/css" href="http://example.com/mysite.css" />
<img src="http://example.com/images/someimage.png" alt="Some Image" />

你需要它看起来像这样:

<link rel="stylesheet" type="text/css" href="/mysite.css" />
<img src="/images/someimage.png" alt="Some Image" />

答案4

我来到了这个页面并且我有 Wordpress,所以这可能会对任何遇到类似问题的人有所帮助。

如果网站在浏览器中使用地址栏中的 localhost 正常加载,但没有使用计算机的 IP 地址(例如 192.168.1.120),则以下内容应该有所帮助:

  1. 转到 localhost/wp-admin/options-general.php
  2. 在 WordPress 地址 URL 和站点地址 URL 字段中,将“localhost”替换为服务器的本地 IP 地址

这解决了我创建/引用的绝对链接的问题。

相关内容