我正在尝试解决与单页应用程序和angularjs相关的简单问题。肯定必须有一个简单的方法来做到这一点,我不知何故失踪。
首先考虑非单页应用的工作原理。我们假设我在根目录中有一个index.html文件,在其中有一个名为other的子文件夹。如果我在浏览器中启动mysite.com/,默认情况下它将提供index.html,一切正常。如果我启动mysite.com/other/other.html它也可以正常工作,因为other.html是一个真实的文件,包括所有支持资源文件等。
现在考虑一个单页角应用,让我们说使用ui-router。我创建了一个路由:state = other,url = / other和template = other / other.html并附带一个控制器
如果我启动mysite.com。它加载角度index.html文件,我按预期获得主页。然后我可以转到浏览器并输入mysite.com/#/other,它会按预期正确加载other.html页面
当我想将应用程序直接启动到mysite.com/other时,问题就出现了。我将遇到的第一个问题是404,因为即使有其他目录,也没有index.html,而且other.html文件只是一个模板,所以不会加载运行应用程序所需的资源
不知何故,服务器需要知道对于角度应用程序,最后没有资源文件名的任何url必须加载index.html并让角度路由器提供实际页面。
我甚至尝试过这个服务器,当你请求url mysite.com/other时让它返回index.html。这确实成功加载了角度应用程序,但令我惊讶的是,mysite.com/other现在在网址中显示了mysite.com/other#/。换句话说,它现在将其他作为基本URL的一部分处理,因此我必须再次键入/ other(即mysite.com/other#/other)以使其显示另一页。
我尝试过使用基本标签和html5mode的各种实验,但仍然无法找到合适的解决方案。
答案 0 :(得分:0)
我似乎找到了解决方案。我将基本URL设置为/并打开html5mode。我还必须配置服务器以返回index.html以查找最后没有文件的任何请求(即没有扩展名)