nginx.conf重写没有被触发

时间:2015-07-02 20:30:03

标签: nginx configuration rewrite

<pec><a href="#" onClick="ampliar();"><img src="001.jpg" width="400" height="250" /></a></pec>
<gran id="granderizable" ><a href="#" onClick="ampliar();"><img src="001ZOOM.jpg" width="1280" height="800" /></a></gran>

当我发出请求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/all

提供服务

但请求转到/etc/nginx/html/mysite/all.html忽略重写,而没有关于日志中的重写错误(仅找不到404)。

1 个答案:

答案 0 :(得分: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)来获取有关这些错误的更多信息。在你的情况下,它会说明如下:

  

&#34; /usr/share/nginx/html/mysite/usr/share/nginx/html/mysite/all.html"失败(2:没有这样的文件或目录),客户端:127.0.0.1,服务器:localhost,请求:&#34; GET / me /所有HTTP / 1.1&#34;,主机:&#34; localhost&#34;