单个项目多个二级域名简单实现思路

soゝso 2018-11-22 13:59:35 8185

二级域名是什么?如果有疑惑的同学,先了解下什么叫二级域名,请看二级域名—百度百科

这里稍微再简单提一下。

sojson.com:一级域名

json.sojson.com:二级域名

www.sojson.com:二级域名(这里好多人说www是一级域名,我只能和你说,严格讲只有sojson.com这种才是一级域名)。

cdn.sojson.com:二级域名

img.cdn.www.sojson.com:三级域名(以此类推,有三级、四级、五级...)

sojson.com/blog/:这里的 /blog/ 它只是一个目录和几级域名没有任何关系。

但有的人把一级除外的都称为二级域名,也勉强可以。

Java 实现多个二级域名

下面进入主题,单个项目多个二级域名简单实现思路。



其实也简单。如上图,也就是把二级域名,转换成目录即可, SpringMVC  支持这种结构,可以对Controller动态添加目录。

不过我是采用Filter方式实现,就是在 SpringMVC  org.springframework.web.servlet.DispatcherServlet之前拦截,处理地址即可。

我现在没有现成的代码,挺简单的,我是因为还有伪静态要处理,所以我在 urlrewrite  Filter里处理的。如下代码。


/**
 * The main method called for each request that this filter is mapped for.
 *
 * @param request  the request to filter
 * @param response the response to filter
 * @param chain    the chain for the filtering
 * @throws IOException
 * @throws ServletException
 */
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
        throws IOException, ServletException {

	
	final HttpServletRequest hsRequest = (HttpServletRequest) request;
        final HttpServletResponse hsResponse = (HttpServletResponse) response;
	
	String uri = hsRequest.getRequestURI();
	String url = hsRequest.getRequestURL().toString();
	LoggerUtils.fmtDebug(getClass(), "进入UrlRewriteFilter,uri[%s]",uri);
	LoggerUtils.fmtDebug(getClass(), "进入UrlRewriteFilter,url[%s]",url);
	
	if(uri.matches("/doc/([\\d]+)(\\.html)?$") || uri.matches("/blog/([\\d]+)(\\.html)$") ){
		uri = uri.replace("doc", "blog").replace(".html", "");
		hsResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);   
		hsResponse.setHeader("Location",uri);  
		
	}else if(uri.equals("/doc/index.html")){
			hsResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);   
			hsResponse.setHeader("Location","/blog/");  
			
		}else{
    	if(url.endsWith(".shtml") || url.endsWith(".txt")){
    		LoggerUtils.fmtDebug(getClass(), "匹配为不需要静态化的地址,继续下一个拦截器!,uri[%s]",uri);
    		chain.doFilter(hsRequest, response);
    	}else{
    		
    	
	    	if((uri.startsWith("/demo/") && !uri.equals("/demo/index.html"))){
	    		LoggerUtils.fmtDebug(getClass(), "匹配Demo地址成功,继续下一个拦截器!,uri[%s]",uri);
	    		chain.doFilter(hsRequest, response);
	    	}else{
	    		LoggerUtils.fmtDebug(getClass(), "匹配伪静态地址成功,进行地址伪静态!,uri[%s]",uri);
		        UrlRewriter urlRewriter = getUrlRewriter(request, response, chain);
		
		       
		        UrlRewriteWrappedResponse urlRewriteWrappedResponse = 
		        	new UrlRewriteWrappedResponse(hsResponse, hsRequest, urlRewriter);
		
		        // check for status request
		        if (statusEnabled && statusServerNameMatcher.isMatch(request.getServerName())) {
		            //String uri = hsRequest.getRequestURI();
		            if (log.isDebugEnabled()) {
		                log.debug("checking for status path on " + uri);
		            }
		            String contextPath = hsRequest.getContextPath();
		            if (uri != null && uri.startsWith(contextPath + statusPath)) {
		                showStatus(hsRequest, urlRewriteWrappedResponse);
		                return;
		            }
		        }
		
		        boolean requestRewritten = false;
		        if (urlRewriter != null) {
		
		            // process the request
		            requestRewritten = urlRewriter.processRequest(hsRequest, urlRewriteWrappedResponse, chain);
		        } else {
	            	    LoggerUtils.debug(getClass(),
	            			"urlRewriter engine not loaded ignoring request (could be a conf file problem)");
		        }
		
		        // if no rewrite has taken place continue as normal
		        if (!requestRewritten) {
		            chain.doFilter(hsRequest, urlRewriteWrappedResponse);
		        }
		    	
		    }
    	      }
       }
}

就用这种匹配方式,然后取到二级域名,然后重定向

hsResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);   
hsResponse.setHeader("Location",uri);  

或者用response直接重定向都可以。具体看下一篇博客。

Java 实现多个二级域名 

那就先这样。有问题留言或者加群或者私聊我。知无不答。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/76.html

转载时必须以链接形式注明原始出处及本声明。


如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

相关文章
单个项目多个二级域名简单实现思路
Java 实现多个二级域名访问同一个Tomcat(系统)。
Shiro 通过配置Cookie 解决多个二级域名的单点登录问题。
Nginx 跳转到www二级域名域名重定向配置方法。
Java 正则获取一域名
Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名
IE、Firefox对同一域名访问并发限制,及解决优化方案
关于微信weixin.com,价值3000万域名腾讯仲裁“0元”得手实际分析
由于多说关闭,多说源码不开放,Java模仿多说评论系统实现
Java生成验证码合集(一)简单
最新文章
关于本站所有JavaScript 加密、混淆、解密、美化等安全说明 78
Jsoup 提交参数乱码,解决思路,解决过程及解决方案 29
生成新浪短网址、百度短网址,t.cn / dwz.cn 的生成方式,短链还原 124
ICP怎么操作取消备案,企业、个人怎么自己申请取消备案? 74
Javascript 加密/压缩后运行不了,JavaScript报错排查讲解 87
JavaScript 不可逆加密问题排查之方案一(闭包优化) 132
Java爬虫,Jsoup 爬取大众点评、美团商家信息电话号码解决方案 453
分解质因数 JavaScript 计算方式,及分解质因数讲解 20
湖南腾众4s店服务怎么样?进来看看你就知道了 43
SEO 之 SpringMVC redirect 301,301和302区别详细讲解 103
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 177358
Elasticsearch教程(四) elasticsearch head 插件安装和使用 139109
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 124723
Elasticsearch教程(六) elasticsearch Client创建 82187
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 80518
Elasticsearch教程(一),全程直播(小白级别) 77691
Elasticsearch教程(二),IK分词器安装 77279
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 76897
Elasticsearch教程(五) elasticsearch Mapping的创建 69872
Elasticsearch教程(三),IK分词器安装 (极速版) 58271

骚码加入我们 / 千人QQ群:259217951

入群需要5元,如果没有QQ钱包,可以先Alipay、微信,赞助然后加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...