Nginx、PHP和rewrite

Nginx、PHP和rewrite,nginx,rewrite,php,Nginx,Rewrite,Php,如何使PHP-FPM规则与Nginx重写规则配合良好 当前配置文件 server { location / { location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_param PATH_INFO $fastcgi_path_info;

如何使PHP-FPM规则与Nginx重写规则配合良好

当前配置文件

server {

location / {

  location ~ \.php$ {
   try_files        $uri =404;
   fastcgi_split_path_info  ^(.+\.php)(/.+)$;
   fastcgi_pass     127.0.0.1:9000;
   fastcgi_param        PATH_INFO   $fastcgi_path_info;
   fastcgi_param        PATH_TRANSLATED $document_root$fastcgi_script_name;
   include          fastcgi.conf;
  }

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

    rewrite ^/(admincp/)$ /index.php?routestring=$1 break;

  }
}

将位置块更改为以下内容。另外,尽量避免使用if语句,请阅读以下内容:

我已经替换了if-E在下面的配置中使用@missing块

server {
    root /your/root/path
    index index.php index.html index.htm;

    server_name your.domain.com;

    rewrite ^/(admincp/)$ /index.php?routestring=$1 break;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to index.php
            try_files $uri $uri/ /index.php?$args;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
            # Move to the @missing part when the file doesn't exist
            try_files $uri @missing;

            # Fix for server variables that behave differently under nginx/$
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # Include the standard fastcgi_params file included with ngingx
            include fastcgi_params;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_index index.php;

            # Override the SCRIPT_FILENAME variable set by fastcgi_params
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_nam$

            # Pass to upstream PHP-FPM; This must match whater you name you$
            #fastcgi_pass phpfpm;
            fastcgi_pass 127.0.0.1:9000;
    }

    location @missing {
            rewrite ^(.*)$ /index.php?routestring=$1 break;
    }
}

将位置块更改为以下内容。另外,尽量避免使用if语句,请阅读以下内容:

我已经替换了if-E在下面的配置中使用@missing块

server {
    root /your/root/path
    index index.php index.html index.htm;

    server_name your.domain.com;

    rewrite ^/(admincp/)$ /index.php?routestring=$1 break;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to index.php
            try_files $uri $uri/ /index.php?$args;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
            # Move to the @missing part when the file doesn't exist
            try_files $uri @missing;

            # Fix for server variables that behave differently under nginx/$
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # Include the standard fastcgi_params file included with ngingx
            include fastcgi_params;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_index index.php;

            # Override the SCRIPT_FILENAME variable set by fastcgi_params
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_nam$

            # Pass to upstream PHP-FPM; This must match whater you name you$
            #fastcgi_pass phpfpm;
            fastcgi_pass 127.0.0.1:9000;
    }

    location @missing {
            rewrite ^(.*)$ /index.php?routestring=$1 break;
    }
}

到底是什么问题?要么没有正确重写,要么没有根据重写的URL正确加载PHP文件。到底是什么问题?要么没有正确重写,要么没有根据重写的URL正确加载PHP文件。