我有几个路线的角度应用,例如:
site.com/
site.com/page
site.com/page/4
Run Code Online (Sandbox Code Playgroud)
使用angular的html5路由模式,当您从应用程序中单击指向它们的链接时,这些解析正确,但当您进行硬刷新时,当然会出现404错误.为了解决这个问题,我尝试了一个基本的htaccess重写.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_METHOD} !OPTIONS
RewriteRule ^(.*)$ index.html [L]
Run Code Online (Sandbox Code Playgroud)
这适用于角度请求,但是当我尝试在我的域中加载脚本或进行ajax调用时,例如:
<script src="/app/programs/script.js"></script>
Run Code Online (Sandbox Code Playgroud)
这个脚本没有加载 - 它的请求被重定向,它试图加载index.html页面,因为.htaccess认为它应该重新路由请求 - 不知道这个文件确实存在,它应该加载文件而不是重定向.
有没有什么方法可以让htaccess将请求重定向到index.html(带有视图参数),只有当它没有应解析的实际文件时?
问题:如何在spring boot中配置.htaccess?
angularjs提供html5Mode,这使您的应用程序使用基于pushstate的URL而不是hashtags.但是,这需要服务器端支持,因为生成的URL也需要正确呈现.
如果您在Apache服务器上运行角度应用程序,则可以在.htaccess文件中轻松添加此规则.
# Apache .htaccess
# angularjs pushstate (history) support:
# See http://www.josscrowcroft.com/2012/code/htaccess-for-html5-history-pushstate-url-routing/
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteCond %{REQUEST_URI} !.*\.(css¦js|html|png) #Add extra extensions needed.
RewriteRule (.*) index.html [L]
</ifModule>
Run Code Online (Sandbox Code Playgroud)