我在Amazons Elastic Beanstalk上有一个角色(1.5.9)应用程序。
我想从网址中删除#
并跟随this guide和其他类似的网址。
app.js更新已完成:
$locationProvider.html5Mode(true);
完成index.html的更新:
<head>
...
<base href="/">
</head>
完成所有引用的更新:
/#/login -> /login
我已经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
我在/ src / main / resources / static目录下有index.html和app.js文件
访问www.mypage.com并导航到www.mypage.com/about可以很好地使用网址中的NO#,但刷新页面会给出404。
我做错了什么?这通常是如何在亚马逊服务器上完成的?
答案 0 :(得分:2)
根据Mike的评论以及一些链接here和here的灵感,我选择放弃亚马逊上的.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('');