问题(由前端,angularjs上下文引起):
“ X在其位置服务中使用HTML5模式。这意味着,您将看到类似www.example.com/mail的URL,而不是看到类似这样的URL:www.example.com/#/mail
另外,如果不遵循.htaccess规则,则无法直接访问应用程序。因此,在网址栏中输入www.example.com/mail或刷新应用程序会导致内部服务器错误。
创建一个与您的index.html保留在同一目录的.htaccess,并在其中粘贴以下代码:“
<IfModule mod_rewrite.c> RewriteEngine On # Send all requests to the index.html unless # it's a directory or a file that actually exists RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.html [L] </IfModule>
当我使用tomcat时,此脚本与必须放在Spring Boot应用程序中的伪代码一样有用。否则,浏览器中没有任何直接键入的路径(获取404白标签服务器页面)。
实际上,我需要实现类似的东西。我什至无法弄清楚应该看哪些组件。
到目前为止,我脑中的信息零散:
那么,我需要创建自定义资源处理程序/自定义过滤器吗?也许问题出在不同的维度上?(tomcat本身?)
这个问题比技术上更合乎逻辑:
答:必须由angular js解析的路径与backed->的含义无关,后端不知道angular知道哪些路径,哪些不知道。
B.因此,如果控制器和资源处理程序无法解析资源,则后端为404。所以:
@Component public class WebConfiguration implements EmbeddedServletContainerCustomizer { @Override public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) { configurableEmbeddedServletContainer.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/index.html")); } }
解决了问题。结果是,每当我们转到/mail,后端都会返回index.html,然后angular解析内部路径并部分显示电子邮件。我不确定自己的角度,我不知道html5模型如何记住路径。
/mail
该解决方案的不足之处在于,针对休息api的请求(针对错误的休息api路径)将接收index.html,但是状态已设置,因此应该没什么大不了的。
但是,很高兴知道后端流中的哪个点知道请求既没有解析为控制器,也没有解析为静态资源,以及如何捕获此行为。