nginx中配置pathinfo模式示例

要想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo?

pathinfo不是nginx的功能,pathinfo是php的功能。

php中有两个pathinfo,一个是环境变量$_SERVER['PATH_INFO'];另一个是pathinfo函数,pathinfo() 函数以数组的形式返回文件路径的信息;。

nginx能做的只是对$_SERVER['PATH_INFO]值的设置。

下面我们举例说明比较直观。先说php中两种pathinfo的作用,再说如何让nginx支持pathinfo。

 

php中的两个pathinfo

php中的pathinfo()

  pathinfo()函数可以对输入的路径进行判断,以数组的形式返回文件路径的信息,数组包含以下元素。

  • [dirname]  路径的目录
  • [basename] 带后缀 文件名
  • [extension]  文件后缀
  • [filename]  不带后缀文件名(需php5.2以上版本)

例如

print_r(pathinfo("/nginx/test.txt"));

输出:

Array
(
    [dirname] => /nginx
    [basename] => test.txt
    [extension] => txt
    [filename] => test
)

 

php中的$_SERVER['PATH_INFO']

  PHP中的全局变量$_SERVER['PATH_INFO'],PATH_INFO是一个CGI 1.1的标准,经常用来做为传参载体。

  被很多系统用来优化url路径格式,最著名的如THINKPHP框架。

  对于下面这个网址:

  http://www.test.cn/index.php/test/my.html?c=index&m=search

  我们可以得到 $_SERVER['PATH_INFO'] = ‘/test/my.html’,而此时 $_SERVER['QUERY_STRING'] = 'c=index&m=search';

  如果不借助高级方法,php中http://www.test.com/index.php?type=search 这样的URL很常见,大多数人可能会觉得不太美观而且对于搜索引擎也是非常不友好的(实际上有没有影响未知),因为现在的搜索引擎已经很智能了,可以收入带参数的后缀网页,不过大家出于整洁的考虑还是想希望能够重写URL,

  下面是一段解析利用PATH_INFO的进行重写的非常简单的代码:

if(!isset($_SERVER['PATH_INFO']))
{
    $pathinfo = 'default';
}
else{
    $pathinfo = explode('/', $_SERVER['PATH_INFO']);
}

if(is_array($pathinfo) && !empty($pathinfo))
{
    $page = $pathinfo[1];
}
else
{
    $page = 'default.php';
}

  有了以上认识我们就可以介入nginx对$_SERVER['PATH_INFO']支持的问题了。在这之前还要介绍一个php.ini中的配置参数cgi.fix_pathinfo,它是用来对设置cgi模式下为php是否提供绝对路径信息或PATH_INFO信息。没有这个参数之前PHP设置绝对路径PATH_TRANSLATED的值为SCRIPT_FILENAME,没有PATH_INFO值。设置这个参数为cgi.fix_pathinfo=1后,cgi设置完整的路径信息PATH_TRANSLATED的值为SCRIPT_FILENAME,并且设置PATH_INFO信息;如果设为cgi.fix_pathinfo=0则只设置绝对路径PATH_TRANSLATED的值为SCRIPT_FILENAME。cgi.fix_pathinfo的默认值是1。

  nginx默认是不会设置PATH_INFO环境变量的的值,需要php使用cgi.fix_pathinfo=1来完成路径信息的获取,但同时会带来安全隐患,需要把cgi.fix_pathinfo=0设置为0,这样php就获取不到PATH_INFO信息,那些依赖PATH_INFO进行URL美化的程序就失效了。

1.可以通过rewrite方式代替php中的PATH_INFO

  实例:thinkphp的pathinfo解决方案
  设置URL_MODEL=2

location / {
    if (!-e $request_filename){
        rewrite ^/(.*)$ /index.php?s=/$1 last;
    }
}

2.nginx配置文件中设置PATH_INFO值
  请求的网址是/abc/index.php/abc

  PATH_INFO的值是/abc
  SCRIPT_FILENAME的值是$doucment_root/abc/index.php
  SCRIPT_NAME /abc/index.php

  旧版本的nginx使用如下方式配置

location ~ \.php
        {
                #fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                include        fastcgi_params;
                set $real_script_name $fastcgi_script_name;
                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                        set $real_script_name $1;
                        set $path_info $2;
                }
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
        }

 

整理之后 nginx.conf 的代码:

     location / {
                if (!-e $request_filename) {
                        rewrite  ^/(.*)$  /index.php/$1  last;
                        break;
                }
        }

        location ~ \.php
        {
                #fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                include        fastcgi_params;
                set $real_script_name $fastcgi_script_name;
                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                        set $real_script_name $1;
                        set $path_info $2;
                }
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
        }

 

转载于:https://www.cnblogs.com/rnckty/p/4832213.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果您想在 Nginx 上运行 WordPress,可以按照以下步骤进行配置: 1. 安装 NginxPHP 确保您的服务器上已经安装了 NginxPHP。您可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install nginx php-fpm php-mysql ``` 2. 配置 Nginx 在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件,例如 wordpress.conf,并添加以下内容: ``` server { listen 80; server_name your-domain.com; root /var/www/wordpress; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # 根据 PHP 版本和安装路径进行更改 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ``` 这个配置文件将监听 80 端口,并将请求发送到 /var/www/wordpress 目录,其包含 WordPress 文件。Nginx 将尝试处理所有 URI,并将 PHP 文件发送到 PHP-FPM 进程,以便进行处理。 3. 配置 PHP 在 /etc/php/7.2/fpm/php.ini 文件进行以下更改: ``` cgi.fix_pathinfo=0 ``` 这将禁用 PATH_INFO 处理,以提高安全性。 4. 重新加载 NginxPHP-FPM 执行以下命令以重新加载 NginxPHP-FPM: ``` sudo systemctl reload nginx sudo systemctl restart php7.2-fpm # 根据 PHP 版本进行更改 ``` 现在您已经成功地在 Nginx配置了 WordPress。您可以访问您的域名并开始使用 WordPress。 ### 回答2: WordPress是一种流行的开源网站建设工具,而Nginx是一种高性能的Web服务器软件。在使用WordPress时,可以通过配置Nginx来提高网站的性能和安全性。 首先,安装和配置Nginx服务器。可以使用apt-get命令或源码方式来安装Nginx,然后编辑Nginx配置文件。配置文件的位置通常是在/etc/nginx/nginx.conf。在配置文件,可以设置服务器的监听端口、域名、目录等信息。 其次,配置Nginx与WordPress的配合。可以通过添加虚拟主机配置文件来实现。首先,创建一个新的配置文件,通常位于/etc/nginx/conf.d/目录下,并以.conf为后缀命名。在配置文件,设置server指令,指定监听的域名和端口号。然后,设置location指令,指定WordPress的根目录和一些其他参数,如rewrite规则和缓存配置等。 接下来,配置WordPress的伪静态规则。在WordPress的根目录,创建一个.htaccess文件,并将以下规则添加到文件: ``` # BEGIN WordPress rewrite ^/index\.php$ - last; rewrite ^/wp-admin/(.*)$ /wp-admin/$1 last; rewrite ^/wp-content/(.*)$ /wp-content/$1 last; rewrite ^/wp-includes/(.*)$ /wp-includes/$1 last; if (-e $request_filename) { rewrite ^(.*)$ /index.php?q=$1 last; } # END WordPress ``` 最后,重启Nginx服务器以使配置生效。可以使用service nginx restart命令来重启。在使用WordPress时,应确保Nginx服务器和WordPress的各项配置都正确无误,并定期查看日志文件以检查是否有错误或异常。 通过以上的步骤,可以正确配置WordPress和Nginx,以提升网站的性能和安全性。使用Nginx作为Web服务器可以显著提高网站的响应速度和并发访问能力,而正确的WordPress配置则可以保护网站免受常见的网络攻击。 ### 回答3: WordPress是一种广泛使用的内容管理系统,能够方便地创建和管理网站。而Nginx则是一种高性能的Web服务器,可以作为WordPress的反向代理服务器,提高网站的性能和稳定性。 对于WordPress的Nginx配置,我们首先需要确保在服务器上安装了NginxPHP,并正确配置了它们之间的通信。 在Nginx配置文件,我们需要定义一个服务器块,将请求代理到PHP处理器。我们可以使用以下示例代码: ``` server { listen 80; server_name example.com; #将example.com替换为你的域名 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /var/www/html; #将/var/www/html替换为你的WordPress安装目录 location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; #根据你的PHP版本和安装路径配置 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` 在以上示例,我们定义了一个监听80端口的服务器块,并指定了服务器的域名。我们还定义了访问日志和错误日志的位置,以及WordPress的安装目录。 location / {} 表示将除了以.php结尾的文件外的所有请求都代理到index.php进行处理。 location ~ .php$ {} 则指定了以.php结尾的请求需要由PHP处理器处理。同时,我们还配置PHP的执行路径和参数,确保Nginx能够正确地将请求传递给PHP。 完成配置后,我们需要重启Nginx服务,使配置生效。可以使用以下命令重启Nginx: ``` sudo service nginx restart ``` 以上就是对于WordPress与Nginx配置过程的简要说明。根据实际情况,可能还需要进行其他的配置调整,以适应不同的环境和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值