单个项目多个二级域名简单实现思路-赖皮兔-养宠物狗猫兔品种图片大全-找宠物店医院美容学校
赖皮兔  > 所属分类  >  建站经验   

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

暂无标签
[0] 评论[0] 编辑

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

这里稍微再简单提一下。

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里处理的。如下代码。


  1. /**
  2. * The main method called for each request that this filter is mapped for.
  3. *
  4. * @param request the request to filter
  5. * @param response the response to filter
  6. * @param chain the chain for the filtering
  7. * @throws IOException
  8. * @throws ServletException
  9. */
  10. publicvoiddoFilter(finalServletRequest request,finalServletResponse response,finalFilterChain chain)
  11. throwsIOException,ServletException{
  12. finalHttpServletRequest hsRequest =(HttpServletRequest) request;
  13. finalHttpServletResponse hsResponse =(HttpServletResponse) response;
  14. String uri = hsRequest.getRequestURI();
  15. String url = hsRequest.getRequestURL().toString();
  16. LoggerUtils.fmtDebug(getClass(),"进入UrlRewriteFilter,uri[%s]",uri);
  17. LoggerUtils.fmtDebug(getClass(),"进入UrlRewriteFilter,url[%s]",url);
  18. if(uri.matches("/doc/([\\d]+)(\\.html)?$")|| uri.matches("/blog/([\\d]+)(\\.html)$")){
  19. uri = uri.replace("doc","blog").replace(".html","");
  20. hsResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
  21. hsResponse.setHeader("Location",uri);
  22. }elseif(uri.equals("/doc/index.html")){
  23. hsResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
  24. hsResponse.setHeader("Location","/blog/");
  25. }else{
  26. if(url.endsWith(".shtml")|| url.endsWith(".txt")){
  27. LoggerUtils.fmtDebug(getClass(),"匹配为不需要静态化的地址,继续下一个拦截器!,uri[%s]",uri);
  28. chain.doFilter(hsRequest, response);
  29. }else{
  30. if((uri.startsWith("/demo/")&&!uri.equals("/demo/index.html"))){
  31. LoggerUtils.fmtDebug(getClass(),"匹配Demo地址成功,继续下一个拦截器!,uri[%s]",uri);
  32. chain.doFilter(hsRequest, response);
  33. }else{
  34. LoggerUtils.fmtDebug(getClass(),"匹配伪静态地址成功,进行地址伪静态!,uri[%s]",uri);
  35. UrlRewriter urlRewriter = getUrlRewriter(request, response, chain);
  36. UrlRewriteWrappedResponse urlRewriteWrappedResponse =
  37. newUrlRewriteWrappedResponse(hsResponse, hsRequest, urlRewriter);
  38. // check for status request
  39. if(statusEnabled && statusServerNameMatcher.isMatch(request.getServerName())){
  40. //String uri = hsRequest.getRequestURI();
  41. if(log.isDebugEnabled()){
  42. log.debug("checking for status path on "+ uri);
  43. }
  44. String contextPath = hsRequest.getContextPath();
  45. if(uri !=null&& uri.startsWith(contextPath + statusPath)){
  46. showStatus(hsRequest, urlRewriteWrappedResponse);
  47. return;
  48. }
  49. }
  50. boolean requestRewritten =false;
  51. if(urlRewriter !=null){
  52. // process the request
  53. requestRewritten = urlRewriter.processRequest(hsRequest, urlRewriteWrappedResponse, chain);
  54. }else{
  55.     LoggerUtils.debug(getClass(),
  56. "urlRewriter engine not loaded ignoring request (could be a conf file problem)");
  57. }
  58. // if no rewrite has taken place continue as normal
  59. if(!requestRewritten){
  60. chain.doFilter(hsRequest, urlRewriteWrappedResponse);
  61. }
  62. }
  63. }
  64. }
  65. }

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

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

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

Java 实现多个二级域名 

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

附件列表


0

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

如果您认为本词条还有待完善,请 编辑

上一篇 齐博CMS分享风格如何把标签内容也分享    下一篇 齐博CMS首页底部标签内容

标签

暂无标签

同义词

暂无同义词