之前一直以为OJ上不了了,后来才发现是要在ip后面加/index/login才能上。
感觉太麻烦了,就想直接ip登录。
实现过程试了很多种方法。
一、
设置默认首页
location / {
root /xxx/xxx
index index.html index.htm
}
root 后面是index.html index.htm的路径,匹配规则是当index.html没有的时候,继续匹配index.htm。
这样之后发现不行,问了朱老板才知道OJ的页面都是要经过django渲染之后才能显示的。
二、
location /{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}
然后我发现其实把这个放在/index 这一层就可以了,因为都是这种形式的/index/xxx。
那么我们直接做个重定向就可以了。
location / {
rewrite ^ ip/index/login ;
}
location /index{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}
此时我们直接访问ip,即跳转到index/login页面,但是登录之后点其他页面却重新跳回了index/login页面。
比如点problemList ,他就跳回了index/login。
这是因为在server里面没有匹配到/index/problemList。所以根据匹配的规则他会匹配到location /{}上, 那么就跳回到index/login。
三、
这个问题也很好解决,我们只要不让他在index/problemList的时候去匹配到location / {}就可以了。
实现办法就是
location = / {
rewrite ^ ip/index/login ;
}
因为location / {}是匹配所有以/开头的查询。
而location = / {}则只匹配以/ 开头的查询,那么当查询index/problemList的时候,就去匹配location/index{}了。
这样就完美解决了以上问题。
四、
突然发现其实不需要将django的配置放到/index
这样就可以了
location = / {
rewrite ^ ip/index/login ;
}
location /{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}
五、
location的一些匹配规则
location = / {
# 只匹配 / 查询。
}location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
}location ^~ /images/ {
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}location ~* .(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。
}location ~* .(gif|jpg|swf)$ {
valid_referers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_referer) {
#防盗链
rewrite ^/ http://$host/logo.png;
}
}
location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
#根据文件类型设置过期时间
expires 1h;
break;
}
}
location ~* .(txt|doc)${
#禁止访问某个目录
root /data/www/wwwroot/linuxtone/test;
deny all;
}