2015-07-02 34 views
0
http{ 
    server { 
     listen 80; 
     server_name example.com; 
     rewrite_log on; 
     root /etc/nginx/html/mysite; 
     location ^~ /me/ { 
      rewrite ^/me/(.*)$ /etc/nginx/html/mysite/$1.html; 
     } 
    } 
} 

以上,当我提出请求http://example.com/me/allnginx.conf的rewrite没有得到触发

我希望它通过/etc/nginx/html/mysite/all.html

放送,但要求去/etc/nginx/html/mysite/me/all忽略重写不工作,没有任何关于日志中的重写错误(只是404未找到)。

回答

0

您正在将虚拟主机的root指定为/etc/nginx/html/mysite(第6行)。在您的重写规则中,再次指定整个路径/etc/nginx/html/mysite/$1.html(第8行)。 nginx所做的是将重写规则的目标(/etc/nginx/html/mysite/$1.html)附加到虚拟主机的根目录(/etc/nginx/html/mysite)。在你比如这导致搜索的文件:

/etc/nginx/html/mysite/etc/nginx/html/mysite/all.html 

这些文件不存在,并导致404 更正规则使目标相对于root相对路径,如:

http{ 
    server { 
     listen 80; 
     server_name example.com; 
     rewrite_log on; 
     root /etc/nginx/html/mysite; 
     location ^~ /me/ { 
      rewrite ^/me/(.*)$ /$1.html; 
     } 
    } 
} 

请记住,您可以通过阅读nginx错误日志(默认设置为/var/log/nginx/error.log)来获得有关这些错误的更多信息。在你情况下,将已经声明是这样的:

“/usr/share/nginx/html/mysite/usr/share/nginx/html/mysite/all.html”失败(2:没有这样的文件或目录),客户端:127.0.0.1,server:localhost,请求:“GET/me/all HTTP/1.1”,主机:“localhost”