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

soゝso 2016-08-22 17:42:46 4005
分享到:

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

这里稍微再简单提一下。

sojson.com:一级域名

json.sojson.com:二级域名

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

cdn.www.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 实现多个二级域名 

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


关于作者
目前就职于国内某电商平台公司打杂。。
相关文章
Java 实现多个二级域名访问同一个Tomcat(系统)。
Shiro 通过配置Cookie 解决多个二级域名的单点登录问题。
Nginx 跳转到www二级域名域名重定向配置方法。
Java 正则获取一域名
Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名
IE、Firefox对同一域名访问并发限制,及解决优化方案
关于微信weixin.com,价值3000万域名腾讯仲裁“0元”得手实际分析
由于多说关闭,多说源码不开放,Java模仿多说评论系统实现
Java生成验证码合集(一)简单
Shiro教程()Maven管理Shrio Jar包
最新文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39212
SOJSON 使用又拍云 CDN 整体架构,解决百度 SEO 方案 33
又拍云(Upyun)刷新CDN,云存储缓存 —JavaAPI 20
JS解密,JavaScript 解密,任何JS加密都能100%解密,以及JS 加密讲解 87
阿里云DNS 解析讲解,SEO配置搜索引擎线路解析 45
百度秒收录教程,怎么做到百度秒收入你的页面,SEO 教程 102
CDN 请求返回 connection reset by peer,被拦截请求解决方案 37
Google AdSense 申请技巧,谷歌广告申请通不过教程 75
Mac 安装 JMeter,JMeter 下载,JMeter Http 压力测试【图解】 51
Java 随机从 List 随机获取多个不重复对象,Mysql 随机10条数据 75
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39214
Elasticsearch教程(四) elasticsearch head 插件安装和使用 109192
Elasticsearch教程(六) elasticsearch Client创建 73333
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 70770
Elasticsearch教程(二),IK分词器安装 67527
Elasticsearch教程(三),IK分词器安装 (极速版) 54098
Elasticsearch教程(五) elasticsearch Mapping的创建 51659
Elasticsearch教程(一),全程直播(小白级别) 51448
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 47798
Elasticsearch权威指南-中文.pdf,Elasticsearch 中文文档下载 40972

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

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

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

支付扫码

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

正在加载... ...