【问题标题】:AngularJS HTML5 mode with UI Router on apacheAngularJS HTML5 模式与 apache 上的 UI 路由器
【发布时间】:2018-10-21 13:27:30
【问题描述】:

几天前,我使用以下代码在我的 angular(1.5.8) 应用上打开了 html 5 模式:

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

后来我读到configuring apache server for html5 mode with ui-router。

做完这些设置后,我面临2个问题:

  1. 浏览器重新加载,重定向到每个深层嵌套应用链接的主页。
  2. 任何来自外部(通过电子邮件)的链接总是重定向到主页。

我玩过

  1. mod_rewrite as-in 在 apache 上使用 <Directory>、FallbackResource。
  2. 更改 index.html 中资产的路径(使用相对 URI 和完全限定 URI)
  3. 添加/删除 base HTML 标记。 (尝试使用“/”、“<sitename>”等选项)

但我还没有克服这些问题。

这是我本地主机上的详细设置:

  1. 我正在通过虚拟主机(而不是 .htaccess)部署到 apache。
  2. 我的部署目录是 /Users/<name>/Sites/<sitename>(我在 mac OS 上)
  3. 我的 index.html 部分如下:

        <head>
          <base href="/">
          <!-- SPELLS 1-->
            <script src="/js/jquery.min.js"></script>
            <script src="/js/bootstrap.min.js"></script>
            <script src="/js/angular.min.js"></script>
            <!-- more scripts / css et al -->
        </head>
    
  4. 我的 Apache(2.4.28) 配置如下:

        <VirtualHost *:80>
        ServerName <servername>
        DocumentRoot "/Users/<name>/Sites/<sitename>"
        #LogLevel debug
        LogLevel debug rewrite:trace6
        RewriteEngine on
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
        RewriteRule ^ - [L]
        RewriteRule ^ index.html [L]
    
        Options Indexes FollowSymLinks
        Require all granted
    
        </VirtualHost>
    

任何人都可以帮助我进行确切的设置吗?

【问题讨论】:

  • 我最接近它的工作是:: 深层嵌套的 url 粘在浏览器上(它没有重定向到 index.html)但是 apache 返回 index.html 作为对所有的响应我的资产(js/css),并将它们的 mime 类型更改为 text/html。
  • 见demo。尝试访问 plunkr 之外的 url,它会中断:: here
  • 相同的demo HTML5 模式中断With html5 mode Apache 404 Not Found

标签: angularjs html apache mod-rewrite angular-ui-router


【解决方案1】:

我不喜欢L 标志,除非您计划多次重写 URL(它只会结束当前迭代,并且重写的 URL 会再次通过规则)。除非您希望 Apache 自动列出目录内容,否则您不需要 Indexes 选项和目录测试。试试这个:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^ index.html [END]

【讨论】:

  • 在目标 url 和主页 url 之间进入无限循环。
  • 我猜这一切都连接了,在你建议的更改之后,我将 href 值更改为“。”我在控制台中收到此错误,深层嵌套 url 重定向到我的应用程序的 404 页面。 无法在“历史”上执行“pushState”:无法在源为“localwc.in”和 URL 为“localwc.in/…”的文档中创建 URL 为“http:”的历史状态对象。
  • 把trace最多放8个,看看日志,你做错了我们看不到的事情。
  • 这对我来说是正确的。因为内容路由是在客户端 JS 中完成的,所以提供相同的 HTML 文件不是重点吗?显示静态文件请求的日志(提供错误的文件)。
猜你喜欢
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多