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

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

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

这里稍微再简单提一下。

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二级域名域名重定向配置方法。
正则从URL中提取一域名,支持大部分域名
Java 正则获取一域名
Javascript 判断域名合法性,JS域名格式检测
Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名
根据域名获取IP地址,Java 获取域名的IP地址
域名备案注意事项,网站域名ICP备案快速通过攻略【干货分享】
查询任意一个域名是否是阿里云备案接入 API
最新文章
新浪短链(t.cn)最新申请官方API的方法讲解。 232
QUIC / HTTP3 协议详细分析讲解 1341
恭喜那个做云存储的七牛云完成 F 轮 10 亿人民币的融资,开启新的云旅程 2019
Autojs怎么安全加密?Autojs在线加密工具注意事项。 2965
Java JSON 组件选型之 FastJson 为什么总有漏洞? 8905
使用七牛云存储实现图片API,自动删除图片方案合集 2627
神速ICP备案经验分享,ICP备案居然一天就通过了 3965
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 4126
SOJSON 拓展服务器被DDos攻击了一晚上,是如何解决的? 4976
湖南地区备案“新增网站需提交组网方案或解释说明”,关于备案做简单叙述 5331
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 468501
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 434636
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 365618
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 361110
免费天气API,天气JSON API,不限次数获取十五天的天气预报 324171
Elasticsearch教程(四) elasticsearch head 插件安装和使用 240648
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 205431
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 148108
Elasticsearch教程(一),全程直播(小白级别) 128254
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 106815

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

入群需要5元为的是没有垃圾广告,如果没有QQ钱包,可以加群主拉进。

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

支付扫码

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

查看我的收藏

正在加载... ...