【发布时间】:2017-02-23 01:54:34
【问题描述】:
我正在用 Go 编写小型网站,但我发现了一些我不知道如何解决的问题。所以...
基本想法是为主题创建一个文件夹,名为/themes/,我们将在其中放置所有主题,f.e. classic、modern等
目录树如下所示:
/themes/
classic/
index.html
header.html
footer.html
css/
style.css
js/
lib.js
modern/
index.html
header.html
footer.html
css/
style.css
js/
lib.js
所以,我的 http 处理程序:
func main() {
reloadConfig()
http.HandleFunc("/", homeHandler)
http.HandleFunc("/reloadConfigHandler/", reloadConfigHandler)
// TODO: Theme loads html files also
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("themes/"+config.Theme+"/"))))
http.ListenAndServe(":80", nil)
}
问题
问题是我的模板文件可以从外部打开,如果我打开路径http://localhost/static/index.html,所以我需要解决方案:
- 拒绝
/static/,显示404。 - 拒绝
/static/*.html,显示404。 - 允许
/static/{folder_name}/{file_name},这样以后我可以添加img文件夹或fonts文件夹,其中的内容将由服务器提供给客户端。
感谢您的建议。
【问题讨论】:
-
添加
/static/css/和/static/js/而不是/static/怎么样?和你现在做的一样,只是两次,路径不同。 -
@ryan 这是解决方案,但不灵活.. 有一天我会使用
/css_minified/,也可能添加/fonts/和/images/或其他一些文件夹。这是解决方案,但不是优雅的方式。 -
混合模板和静态文件在 $current_year 中被认为是不优雅的事情 =) 如果您能够将
css和js嵌套在另一个assets目录中并将模板放入templates(该部分是可选的),也可以。 -
@Ryan 这也是将
css和js文件夹放入/assets/的好主意。也许比为文件编写自己的处理程序更好。
标签: go