如何从Amazon(角色应用程序)上的角度应用中的网址中删除#

时间:2017-05-22 14:07:12

标签: angularjs amazon-web-services url

我在Amazons Elastic Beanstalk上有一个角色(1.5.9)应用程序。

我想从网址中删除#并跟随this guide和其他类似的网址。

  1. app.js更新已完成:

    $locationProvider.html5Mode(true);
    
  2. 完成index.html的更新:

    <head>
        ...
        <base href="/">
    </head>
    
  3. 完成所有引用的更新:

    /#/login -> /login

  4. 我已经ssh到我的亚马逊服务器并在那里创建了一个.htaccess文件:

    [ec2-user@ip-xxx-xx-x-xxx]$ ll -a /var/www/html total 12 drwxr-xr-x 2 root root 4096 22 maj 13.43 . drwxr-xr-x 6 root root 4096 1 maj 23.56 .. -rw-r--r-- 1 root root 339 22 maj 13.43 .htaccess

    内容:

    RewriteEngine On  
    # If an existing asset or directory is requested go to it as it is
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    RewriteRule ^ - [L]
    
    # If the requested resource doesn't exist, use index.html
    RewriteRule ^ /index.html
    
  5. 我在/ src / main / resources / static目录下有index.html和app.js文件

    访问www.mypage.com并导航到www.mypage.com/about可以很好地使用网址中的NO#,但刷新页面会给出404。

    我做错了什么?这通常是如何在亚马逊服务器上完成的?

2 个答案:

答案 0 :(得分:2)

根据Mike的评论以及一些链接herehere的灵感,我选择放弃亚马逊上的.htaccess文件,httpd.conf文件或其他此类重定向。相反,我只是将这个控制器添加到我的Java Spring Boot后端:

package com.example

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CatchAllController {
    @RequestMapping(value = "/**/{[path:[^\\.]*}")
    public String redirect() {
        return "forward:/";
    }
}

使用@RestController对我不起作用,我不得不使用@Controller。

该模式匹配所有没有&#34;。&#34;因此,像.jpg图像这样的资源不匹配。此外,所有其他端点仍然首先匹配(我猜因为它们比这个规则更具体)

与原始问题中的步骤1-3一起,这使得一切都按预期工作,重新加载工作很好,任何地方都不需要#。现在我可以在熟悉的Java上下文中控制它,轻松测试localhost并且不会迷失在mod_rewrite docs中......

答案 1 :(得分:0)

要从网址中删除#,您需要在配置中设置HTLML5模式:

appModule.config(['$locationProvider', function($locationProvider) {
  $locationProvider.html5Mode(true);   
}]);

还要在index.html的<head>标记中设置基数:

<head>
    ...
    <base href="/">
</head>

如果您使用 Angular 1.6 或更高版本,则还需要更新hashPrefix(默认!):

$locationProvider.hashPrefix('');