繁体   English   中英

使用nginx和php-fpm参数重写URI

[英]URI rewrite with nginx and php-fpm with parameters

我在带有php-fpm的Nginx服务器上有很多不同的规则。

一个简单的重写就是使用以下命令将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。我不确定我哪里出错了,我们将不胜感激。

您没有显示如何调用命名位置@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,因此您需要在此处查找常规知识,或使用类似以下内容的方法:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM