域名直接访问项目(自动追加项目名称)

场景

  有时候需要通过域名直接访问项目,但是这样有一个隐患:

  后端:request.getContextPath(); 获取为空。
  前端:window.location.pathname.split("/")[1] 也会为空。

  这样可能有些项目会发生不可预知的错误。

分析

  可以通过域名直接访问一个页面,然后重定向到项目首页。

解决方法

第一步:

tomcatwebapps下,新建文件夹 Redirect(可以起别的名字),在文件夹下面新建页面 index.html,代码如下:

<html>
    <head>
        <script type="text/javascript">
            var href = location.href.replace("http://","https://");
            location.replace(href + "/YourProjectName");
        script>
    head>
    <body>  
    body>
html>

大致思路是:如果是http访问则替换成https(当然在项目中也应该配置httphttps的转换,如何配置看这里,在访问的域名后直接拼接项目名称YourProjectName

第二步:

配置tomcat中的server.xml,目的是直接访问域名可以访问到index.html页面,www.yourdomain.com修改成你自己的域名,修改步骤如下:

  1. 更改Engine标签内容:

    <Engine name="Catalina" defaultHost="www.yourdomain.com"> 
  2. 更改Host标签内容,appBase可以修改成自己的项目部署路径,一般默认就好:

    <Host name="www.yourdomain.com"  appBase="webapps"
     unpackWARs="true" autoDeploy="true"> 
  3. Host标签中增加如下内容,path为空,docBase:为访问的项目路径,改成第一步新建的Redirect路径即可:
    <Context path="" docBase="/Redirect" reloadable="false" />

结束语

将实际项目与新建的Redirect项目共同放到webapps下面,启动服务器,访问www.yourdomain.com,会自动访问 www.yourdomain.com/YourProjectName

这样的做法如果不可以接受,必须 www.yourdomain.com,后面不加任何杂质的话,建议还是改代码吧,平时编码注意不要和项目名称做过多的耦合。

你可能感兴趣的:(部署)