如果文件不存在,则重写

如果文件不存在,则重写

如果用户输入www.mysite.com/foo.php,如果文件 foo 存在,服务器将以 foo 响应,但如果文件不存在,则需要像这样重写:www.mysite.com/url.php?url=foo.php

我正在 nginx 上尝试这个:

    location / {
            include /etc/nginx/global/*;
            #try_files $uri $uri/ /index.html;

            if (!-e $request_filename){
              rewrite ^(.*)$ /url.php?url=$1 break;
            }
    }

但是,浏览器不会渲染页面(当文件不存在时),而是下载它。为什么?

答案1

如果尚未添加,您必须添加处理 .php 文件的位置。当然,还要设置 php-fpm。

location / {
    include /etc/nginx/global/*;
    try_files $uri $uri/ /url.php?url=$uri;
}

# something about
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
}

答案2

就像是

try_files $uri $uri/ /url.php?url=$uri;

应该可以奏效。

相关内容