Приложение Tomcat / Angular в Windows против Linux и конечная косая черта

0

У меня проблема, которую я не уверен в отношении углового или моего сервера (tomcat 7).

Я до сих пор разрабатывал свою локальную машину, которая является ящиком Windows, и я смог развернуть и запустить мой веб-сайт успешно до сих пор без каких-либо проблем. Я обращаюсь к сайту, перейдя по URL-адресу: http://localhost: 8080/appname

Теперь $ stateProvider для моего углового приложения правильно загружает состояние по умолчанию (так что URL-адрес становится http://localhost: 8080/appname/#/login).

Теперь я развернусь в нашей тестовой среде, которая является Linux-машиной (тот же tomcat7). Когда я сейчас перейду URL: http://test-box: 8080/appname, он переходит к этому: http://test-box: 8080/appname #/

Обратите внимание на недостающую конечную косую черту после "appname". Загружается только пустая страница. Я не знаю, где может быть проблема, кошка или угловатая, хотя я склоняюсь к последней.

Теги:
windows-7
tomcat7

1 ответ

0
Лучший ответ

Поэтому мне не удалось понять, почему это происходит только в моей тестовой среде, но мне удалось обойти эту проблему. Я сделал следующее:

  1. Включен режим html5 для углового приложения:

    $locationProvider.html5Mode({
        enabled: true,
        requireBase: true
    });
    

    У меня есть requireBase как "true", потому что, как я уже упоминал выше, webapp имеет имя appName, которое приводит меня к пункту 2.

  2. Чтобы ваше угловое приложение могло работать с вашим базовым именем приложения, добавьте его в свой основной файл index.html:

    <base href="/appName/">
    

    Убедитесь, что это сделано в верхней части <head>

  3. Вышеупомянутая проблема была исправлена, но была введена новая. Из-за режима html5 вы больше не увидите # вашего URL-адреса. И теперь, когда вы обновляете страницу, поскольку теперь URL-адрес полностью управляется угловым, сервер может не знать, как обращаться с ресурсом, к которому вы пытаетесь получить доступ. Он может даже не существовать на стороне сервера, и вы получите 404. Таким образом, если вы обновите страницу и попытаетесь получить доступ к чему-либо, о чем сервер не знает (в моем случае все, начиная с appName/api, appName/resourc и т.д.), он должен быть перенаправлен на index.html. Это означает, что вам нужно будет переписать URL. К сожалению, tomcat7 не поддерживает это, поэтому мне пришлось перейти на tomcat8. Редактирование URL-адресов также может быть настроено на внешнем сервере apache. Если вы в состоянии это сделать, в tomcat8 включите переписывание URL-адресов в conf/server.xml:

    <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
    
        <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
    

    Затем создайте новый файл conf/rewrite.config который имеет:

    RewriteCond %{REQUEST_URI} ^/appName/(api|resource).*$
    
    RewriteRule ^.*$ - [L]
    RewriteRule ^.*$ /appName/index.html [L,QSA]
    

    Это говорит о том, что все, начиная с api/* или resource/* в порядке, все остальные должны быть перенаправлены на index.html.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню