通过研究发现,官方开源的代码里基本上已经有了相关的处理逻辑,只是有些代码被注释掉,有些模板不存在,有些模板太简陋了,比如后台管理中用户管理这个模板 ![](/api/file/getImage?fileId=5de350811563da001200001b) 居然连编辑用户信息的地方都没有,所以需要添加一个编辑用户信息的功能,主要是修改用户信息字段中的Domain(用户自定义域名)、SubDomain(用户使用的二级域名) 下面来说说步骤 ## 配置文件 文件:conf/app.conf 将site.url修改为主域名,比如 ``` site.url=https://haolie.net ``` ## 修改路由表 文件:conf/routes 在合适的位置添加以下路由: ``` # 自定义域名,只针对blog常用的链接 GET /getLikesAndComments Blog.GetLikesAndComments GET /getLikes Blog.GetLikes * /incReadNum Blog.IncReadNum * /likePost Blog.LikePost * /likeComment Blog.LikeComment * /deleteComment Blog.DeleteComment GET /getComments Blog.GetComments * /commentPost Blog.CommentPost GET /getPostStat Blog.GetPostStat GET /tags Blog.Tags GET /tag/:tag Blog.Tag GET /search Blog.Search GET /archives Blog.Archives GET /post/:noteId Blog.Post GET /view/:noteId Blog.Post GET /single/:singleId Blog.Single GET /cate/:notebookId Blog.Cate GET /listCateLatest/:notebookId Blog.ListCateLatest ``` 以上内容基本来源于原路由表的blog段,只是取掉了/blog这一层定义,因为使用域名可以直接完成这些 ## 代码 文件:app/service/BlogServeice.go 函数:GetUserBlogUrl 将原有的注释给取掉,修改为: ```go func (this *BlogService) GetUserBlogUrl(userBlog *info.UserBlog, username string) string { if userBlog != nil { if userBlog.Domain != "" && configService.AllowCustomDomain() { return configService.GetUserUrl(userBlog.Domain) } else if userBlog.SubDomain != "" { return configService.GetUserSubUrl(userBlog.SubDomain) } if username == "" { username = userBlog.UserId.Hex() } } return configService.GetBlogUrl() + "/" + username } ``` 函数:GetBlogUrls 同样将原有的注释给取掉,修改为: ```go func (this *BlogService) GetBlogUrls(userBlog *info.UserBlog, userInfo *info.User) info.BlogUrls { var indexUrl, postUrl, searchUrl, cateUrl, singleUrl, tagsUrl, archiveUrl, tagPostsUrl string if userBlog.Domain != "" && configService.AllowCustomDomain() { // http://demo.com // ok indexUrl = configService.GetUserUrl(userBlog.Domain) cateUrl = indexUrl + "/cate" // /xxxxx postUrl = indexUrl + "/post" // /xxxxx searchUrl = indexUrl + "/search" // /xxxxx singleUrl = indexUrl + "/single" archiveUrl = indexUrl + "/archives" tagsUrl = indexUrl + "/tags" tagPostsUrl = indexUrl + "/tag" } else if userBlog.SubDomain != "" { // demo.leanote.com indexUrl = configService.GetUserSubUrl(userBlog.SubDomain) cateUrl = indexUrl + "/cate" // /xxxxx postUrl = indexUrl + "/post" // /xxxxx searchUrl = indexUrl + "/search" // /xxxxx singleUrl = indexUrl + "/single" archiveUrl = indexUrl + "/archives" tagsUrl = indexUrl + "/tags" tagPostsUrl = indexUrl + "/tag" } else { // ok blogUrl := configService.GetBlogUrl() // blog.leanote.com userIdOrEmail := "" if userInfo.Username != "" { userIdOrEmail = userInfo.Username } else if userInfo.Email != "" { userIdOrEmail = userInfo.Email } else { userIdOrEmail = userInfo.UserId.Hex() } indexUrl = blogUrl + "/" + userIdOrEmail cateUrl = blogUrl + "/cate/" + userIdOrEmail // /username/notebookId postUrl = blogUrl + "/post/" + userIdOrEmail // /username/xxxxx searchUrl = blogUrl + "/search/" + userIdOrEmail // blog.leanote.com/search/username singleUrl = blogUrl + "/single/" + userIdOrEmail // blog.leanote.com/single/username/singleId archiveUrl = blogUrl + "/archives/" + userIdOrEmail // blog.leanote.com/archive/username tagsUrl = blogUrl + "/tags/" + userIdOrEmail tagPostsUrl = blogUrl + "/tag/" + userIdOrEmail // blog.leanote.com/archive/username } return info.BlogUrls{ IndexUrl: indexUrl, CateUrl: cateUrl, SearchUrl: searchUrl, SingleUrl: singleUrl, PostUrl: postUrl, ArchiveUrl: archiveUrl, TagsUrl: tagsUrl, TagPostsUrl: tagPostsUrl, } } ``` ## 二级子域名 写代码有点烦,需要模板以及后端,这里直接说数据库的操作,打开数据表user_blogs,找到需要使用二级域名的用户,修改SubDomain字段为要使用的二级域名即可,比如: ``` note ``` ## 用户自定义域名 同上,直接打开数据表user_blogs,修改指定用户的Domain字段,然后,打开数据表configs,查找对应用户的allowCustomDomain配置项的值,比如设为yes ## 测试 以上修改完成后,直接重新编译,运行,然后打开浏览器访问https://note.haolie.net即可看到效果,链接后面不再有/blog/post/XXXXX这样的字样 最后修改:5年前 © 著作权归作者所有