WedX - журнал о программировании и компьютерных науках

Странные различия между доступом к моему веб-сайту через частный IP-адрес и общедоступный IP-адрес с переадресацией порта

Я проверил следующие проблемы, используя MacBook Pro, а затем Raspberry Pi в качестве веб-серверов, оба привели к одной и той же проблеме. Я создал веб-сайт и в настоящее время перенаправляю его, и всякий раз, когда я получаю доступ к нему, вводя частный IP-адрес сервера (независимо от того, был ли сервер моим MacBook Pro или Raspberry Pi), все работает нормально, но когда я получаю доступ к своему сайту через port forwarded public IP, возникают две проблемы, которые не возникали при просмотре сайта через приватный ip адрес:

Проблема 1) Допустим, мой веб-сайт называется «mysite.com». Если я наберу «mysite.com/about» в строке URL-адреса, он перейдет на эту страницу «о нас», и 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 возвращают гораздо большие числа, чем при доступе к ним с моего частного IP-адреса Wi-Fi. Так, например, на моем iphone window.innerWidth возвращает размер 320 при доступе к нему через частный IP-адрес, но возвращает размер 980 при доступе к той же странице через общедоступный IP-адрес, на который я перенаправляю порт. Тем не менее, window.screen.width остается неизменным. В результате макет сайта с перенаправлением портов отличается и не работает. Как будто <meta name="viewport" content="width=device-width, initial-scale=1.0"> игнорируется при просмотре через общедоступный IP-адрес.

Заранее спасибо за любую помощь или ресурсы!


Ответы:


1

Проблема была не в коде, а в том, что я выполнял перенаправление кадров с моего ddns на мое доменное имя с 1&1. Просмотр моего сайта с общедоступным IP-адресом или ddns в строке URL-адреса привел к правильному макету, но просмотр его с моим доменным именем 1&1 в строке URL-адреса привел к испорченному макету. Поняв, что <meta name="viewport" content="width=device-width, initial-scale=1.0"> должен сохранять iPhone window.innerWidth равным 320, предотвращая его от 980, я понял, что метатег должен каким-то образом перезаписываться. Я просмотрел источник моего доменного имени по сравнению с моим ddns, и, конечно же, метатег со страницы моего доменного имени был совсем не тем, что я написал... перенаправление фрейма заключало мой код в метатег моего домена. с 1 и 1, что привело к двум проблемам, с которыми я столкнулся: 1) навигация по моему сайту была нарушена, 2) код области просмотра больше не был в моем метатеге. Поэтому я продолжаю этот вопрос для тех, у кого когда-либо была такая же проблема, как у меня. Кто-то там, где работает домашний сервер и пытается подключить свой ddns к своему домену, перенаправление кадров не способ сделать это. В настоящее время мне приходится напрямую подключать свой общедоступный IP-адрес к моему домену, пока я не выясню, как использовать мой ddns в качестве сервера имен, если это возможно. В настоящее время изучаю CNAME, предположительно, это то, что я должен делать.

19.08.2017
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]