使用参数

时间:2015-12-28 20:06:57

标签: php nginx rewrite

我的nginx服务器上有一堆不同的规则,带有php-fpm。

简单的是重写,使用

http://server/ $ 1?param = 1更改为http://server/ $ 1.php?param = 1
location @extensionless-php {
            rewrite ^(.*)$ $1.php last;
}

我还需要将http://server/abc/123重写为http://server/abc.php/123,并将其处理为php-fpm

这是fast-cgi代码:

location ~ [^/]\.php(/|$) {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

}

这是位置重写

location @abc-php {
    rewrite ^(.*)/abc/(.*)$ $1/photo.php/$2 last;
}

但我一直得到404.我不确定我哪里出错了,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

您不会显示如何调用命名位置@abc-php。我怀疑你有这样的东西来管理无扩展的PHP:

location / {
    try_files $uri $uri/ @extensionless-php;
}

您的新重写规则可以添加到现有的命名位置,如下所示:

location @extensionless-php {
    rewrite ^(.*)/abc/(.*)$ $1/photo.php/$2 last;
    rewrite ^(.*)$ $1.php last;
}

但是,你的fast-cgi块无法处理path_info,所以你需要look here来获得传统智慧,或者使用类似的东西:

location ~ ^(?<script>.*\.php)(?<pathinfo>.*)$ {
    try_files $script =404;
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $pathinfo;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}