通过私有 IP 访问我的网站与转发端口 public IP 之间的奇怪差异

Strange differences between accessing my website via private IP vs port forwarded public IP

我使用 MacBook Pro 和 Raspberry Pi 作为 Web 服务器测试了以下问题,两者都导致了相同的问题。我建立了一个网站,目前正在端口转发它,每当我通过输入服务器的私有 IP 地址(无论服务器是我的 MacBook Pro 还是 Raspberry Pi)访问它时,一切正常,但是当我访问我的通过转发的端口publicIP访问站点,有两个通过私有ip地址查看站点时没有出现的问题:

问题 1) 假设我的网站是“mysite.com”。如果我在 URL 地址栏中输入“mysite.com/about”,它会转到“关于”页面,并且 URL 正确显示“mysite.com/about”。但是,如果我在“mysite.com”的主页上,然后单击导航栏上的“关于”选项卡,我没有在 URL 地址栏中输入请求,而是转到了正确的页面,但仍然显示主页“mysite.com” 作为 URL 当它应该说 "mysite.com/about"。我正在使用 AngularJS,但我将我的网站构建为多页应用程序,是的,我在导航栏中的选项卡链接中使用了 target=“_self”,其中遗漏会导致导航栏损坏。

与我的导航栏相关的代码部分:

app.config(['$locationProvider', '$httpProvider', function($locationProvider, $httpProvider) {
    $locationProvider.html5Mode({
      enabled: true,
      requireBase: true
    });
}]);

<li ng-class="{active: isActive('/')}"><a href="/" target="_self">Home</a></li>
<li ng-class="{active: isActive('/about')}"><a href="/about" target="_self">About</a></li>
<li ng-class="{active: isActive('/news')}"><a href="/news" target="_self">News</a></li>

app.controller('NavController', ['$scope', '$location', function($scope, $location){
   $scope.isActive = function(destination){
      return destination === $location.path(); 
   }
}])

在我的 html 脑袋里我有:

<base href="/">

在我的 .htaccess 中我有:

RewriteEngine on
RewriteRule ^about$ index.php [L]
RewriteRule ^news$ index.php [L]
ErrorDocument 404 /index.php

问题 2) window.innerHeight 和 window.innerWidth returns 现在的数字比在我的 wifi 私有 ip 中访问时大得多。因此,例如在我的 iphone 上,通过私有 IP 访问时 window.innerWidth returns 大小为 320,但通过以下方式访问同一页面时 returns 大小为 980 public 我将其端口转发到的 IP。然而,window.screen.width 保持不变。结果,端口转发站点的布局不同且损坏。当通过 public IP 查看时,就好像 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 被忽略了。

在此先感谢您提供任何帮助或资源!

问题不在代码中,而是在我使用 1&1 从我的 ddns 到我的域名进行 帧重定向 时。在我的 URL 栏中使用 public IP 或 ddns 查看我的站点导致布局正确,但在 URL 栏中使用我的 1&1 域名查看它导致布局混乱.在意识到 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 应该将 iPhone window.innerWidth 保持为 320 以防止它变成 980 之后,我意识到元标记必须以某种方式被覆盖。我查看了我的域名来源,对比了我的 ddns,果然我域名页面上的元标记根本不是我写的……框架重定向将我的代码包装在我域的元标记中1&1 导致了我遇到的两个问题:1) 整个网站的导航都被破坏了,2) 视口代码不再在我的元标记中。所以我一直在为任何遇到过与我相同问题的人提出这个问题。有人在那里 运行 一个家庭服务器并试图将他们的 ddns 连接到他们的域,帧重定向不是这样做的方法。目前我必须将我的 public IP 直接连接到我的域,直到我弄清楚如何使用我的 ddns 作为名称服务器(如果可能的话)。目前正在研究 CNAME,据说这是我应该做的。