如何使nginx重写与别名一起玩得很好?

时间:2014-08-30 15:40:55

标签: nginx rewrite alias

this question类似,我遇到的问题是nginx重写不能很好地播放。

这是我的nginx conf:

server {                                                                           
    listen 80;                                                                     
    server_name myserver.com www.myserver.com;                               
    index index.html;                                                              
    root /var/www/myserver.com/site/;                                           

    location /blog {                                                               
        alias /var/www/myserver.com/blog/output/;                               
        break;                                                                     
    }                                                                              

    location / {                                                                   
        autoindex on;                                                              
        try_files $uri $uri/ @htmlext;                                             
    }                                                                              

    location /.hg {                                                                
        deny all;                                                                  
        return 404;                                                                
    }                                                                              

    location ~ \.html$ {                                                           
        try_files $uri =404;                                                       
    }                                                                              

    location @htmlext {                                                            
        rewrite ^(.*)$ $1.html last;                                               
    }                                                                              

    error_page 500 502 503 504 /media/50x.html;                                    
}                                    

问题似乎与location ~ \.html规则有关。当我删除它时,它工作正常。

我尝试了多种方法,例如:

  • location /blog指令移到顶部(它曾经位于底部)
  • 如链接问题所示,将break;置于其中。

到目前为止,似乎没有任何效果。在当前配置中,我得到一个404,这也是access.log中显示的内容。

如何让重写工作隐藏.html扩展程序,还让我提供blog/output/内容?

1 个答案:

答案 0 :(得分:0)

这个问题最奇怪的答案很可能来自this answer

location ^~ /blog {
        alias /var/www/myserver.com/blog/output/;                               
        break;
}

老实说,即使在阅读documentation之后,我仍然无法解释为什么会这样。我知道它与^~的正则表达式匹配行为有关,但这就是我所拥有的。