nginx GET .php variables


nginx GET .php variables

我有一堆PHP文件。PHP ?id=123,我需要得到它们。我如何在我的配置文件中完成它们?

我似乎不知道如何利用

get1.php?id=stuff
get2.php?id=stuff
get3.php?id=stuff

等等…

问题是,当它们都在同一个根目录下时,我该如何做到这一点?


使用以下命令,我在p.p php上得到500 ERROR ?id=945,但PHP工作正常,但我不能登录或获得POST数据工作

server {
      listen 80;
      server_name site.com www.site.com;
      root /home/site/public_html;
      location / {
      index  index.php index.html index.htm;
      location ~.*'.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
      expires 1d;
      try_files $uri?$args @backend;
      }
      error_page 405 = @backend;
      add_header X-Cache "HIT from Backend";
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
      }
      location @backend {
      internal;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
      }
      location ~ .*'.(php|jsp|cgi|pl|py)?$ {
        try_files $uri?$args /index.php;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
      }
      location ~ /'.ht {
      deny all;
      }
    }

THIS:只有500重写或内部重定向循环,同时内部重定向到"/index.php"

server {
    listen       80;
    server_name site.com www.site.com;
    root /home/site/public_html;
    #try and serve static files directly
    location ~* ^[^'?'&]+'.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
        try_files $uri @inPlaceDynamicFile;
        expires 24h;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }
    #allow us to have dynamic css/js files
    location @inPlaceDynamicFile {
        # examples /css/cssIncludes.css => /css/cssIncludes.css.php
        try_files $uri.php =404;
        fastcgi_pass   127.0.0.1:9001;
        include       fastcgi_params.conf;
    }
    location  / {
        try_files $uri?$args /index.php?q=$uri&$args;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params.conf;
    }
}

"这是正确的吗?"

不。

1)根不应该在位置块中,它应该只在服务器块中。

2) Apache重写测试,如果某些东西是一个现有的文件是完成与try_files而不是Nginx重写。参见

3)您的proxy_pass将通过同一服务器,这必须是一个循环重定向。

4)你也有一个位置块内部的位置块,这似乎很奇怪。虽然这可能需要一些高级配置,但你不需要它来做你正在做的事情。

我想你可能希望你的nginx配置是这样的:

server {
    listen       80;
    server_name site.com www.site.com;
    root /home/site/public_html;
    #try and serve static files directly
    location ~* ^[^'?'&]+'.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
        try_files $uri @inPlaceDynamicFile;
        expires 24h;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }
    #allow us to have dynamic css/js files
    location @inPlaceDynamicFile {
        # examples /css/cssIncludes.css => /css/cssIncludes.css.php
        try_files $uri.php =404;
        fastcgi_pass   127.0.0.1:9000;
        include       fastcgi_params.conf;
    }
    location  / {
        try_files $uri /p.php?q=$uri&$args;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params.conf;
    }
}

如果你想让所有包含。php的请求都转到你的p.php文件,那么你应该用

替换最后一个位置块:
location  ~ /(.*)'.php {
    try_files $uri /p.php?q=$uri&$args;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include       fastcgi_params.conf;
}
location  / {
    try_files /index.php =404;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include       fastcgi_params.conf;
}

编辑

我是否需要为每个php文件创建特定的重写$ _GET ["]; ?

不-您应该能够通过try_files将它们传递给任何文件,如:

location  / {
        try_files $uri?$args /index.php?q=$uri&$args;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params.conf;
    }

它将匹配任何.php请求到一个php文件,如果它存在并且附加了查询字符串,然后如果.php文件不存在并且传入了查询字符串和路径,则返回到index.php。