此前看到慕课网是用nginx部署的静态资源,所以想自己尝试下用ngjinx部署我的资源。现在需要下面几个问题:
/course/list
,我只能使用list.html
,我想让每个连接都不会出现.html
的后缀,这个是重写url吗,还是用location配置2.
上面的是一个location的配置,用来反向代理,它不应该可以匹配像/test/test.html
,但是没有匹配到,所以没有转发到代理服务器,而是正常显示静态页面。
但是它可以匹配这样的:/products/getproducts/2
,确实转发到了:localhost:8086/products/getproducts/2
,得到正确的数据。
先问这两个吧,对服务器不是很懂,可能有点白痴,望解答呀
大家讲道理2017-05-16 17:25:54
第一个问题:
Nginx用try_files指令可以很方便地把请求数据导入到框架的前端控制器比如index.php里:
location {
try_files $uri $uri/ /index.php?$args;
}
前端控制器index.php可以用$_SERVER['REQUEST_URI']获取/course/list这串URL参数,如果后面还有参数,比如/course/list?page=2&tag=mysql,这时可以用$_SERVER['QUERY_STRING']获取查询串page=2&tag=mysql,然后自行urldecode后用explode以&分割串获得类似$_GET的参数数组,也可以直接使用$_GET拿到参数数组.
总而言之,就是由程序入口index.php及其里面的程序决定是加载HTML静态文件返回,还是连接数据库可进行处理.
如果你想让Nginx判断是否命中HTML缓存,可以这样配置:
location / {
try_files $uri $uri/ /html$uri.html /index.php?$args;
}
比如访问/post/1024,Nginx会按try_files给定的顺序尝试访问以下文件:
/post/1024 ($uri 表示文件)
/post/1024/ ($uri/ 表示目录)
/html/post/1024.html (/html$uri.html 表示你的HTML静态缓存)
如果都不存在,则连同参数把URI信息交给index.php处理 (最后的/index.php?$args表达的就是这个意思).
習慣沉默2017-05-16 17:25:54
问题 1,可以使用rewrite方式,例如:
rewrite "^/(course/.*)/?" .html last;
需要注意的是只重写所有course 开头的请求
xxx.com/course/list -> xxx.com/course/list.html
xxx.com/course/list/sub -> xxx.com/course/list/sub.html
问题 2
感觉应该还有其他的location 配置,如果方便把整个nginx配置贴出来