我正在构建一个Angular应用程序。它以/hris
为基础,以href为基础。所以我访问该应用程序的基本URL将是domain.com/hris
。此外,我有3个不同的应用程序,其中一个称为term
。因此,当我点击term
链接时,它会转到domain.com/hris/term。
当用户直接尝试访问链接domain.com/hris/term
时,它返回404并带有消息:HTTP Status 404 - /hris/term
。
我不希望发生404。怎么做到这一点?
到目前为止我做了什么:
我试图在.htaccess
所在的文件夹中创建一个index.html
文件。(我使用ng build --base-href=/hris/
构建了Angular应用程序)。我将dist
文件夹部署到名为hris
的目录中的服务器上。
在.htaccess
文件中,我使用了以下变体,但无济于事。
<IfModule mod_rewrite.c>
Options Indexes FollowSymLinks
RewriteEngine On
RewriteBase /hris/
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
</IfModule>
<IfModule mod_rewrite.c>
Options Indexes FollowSymLinks
RewriteEngine On
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) index.html [NC,L]
</IfModule>
我正在使用Angular 5.请告诉我,如果我的方法是正确的,或者我必须做些什么才能实现这一目标。
版本:Apache Tomcat 7-版本7.0.64
“.htaccess”文件在Tomcat上不起作用。将重写配置放入文件WEB-INF/rewrite.conf
,也许是这样的:
RewriteCond %{SERVLET_PATH} !-f
RewriteRule ^/(.*)$ /index.html [L]
接下来你需要添加一个名为META-INF/context.xml
的文件,它可以重写,即:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" tldValidation="false" xmlValidation="false">
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>
同时从Angular应用程序中删除HashLocationStrategy。
在apache tomcat服务器上部署角度应用程序(使用PathLocationStrategy路由)时修复深层链接问题(8,9) -
server.xml -
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
...
</Host>
...
rewrite.config - (注意 - / hello /是tomcat上角度应用程序的上下文路径)
RewriteCond %{REQUEST_PATH} !-f
RewriteRule ^/hello/(.*) /hello/index.html
我在我的文章中记录了这一点 - Fixing deep linking issue – Deploying angular application on Tomcat server