nginx GET .php变量

时间:2013-04-24 17:11:37

标签: .htaccess mod-rewrite nginx rewrite php

我有一堆PHP文件,它们带有.php?id = 123,我需要全部获取它们。如何在配置文件中完成所有操作?

我似乎无法弄清楚如何使用

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

依旧......

问题是当它们都在同一根目录下时我该怎么做?


以下我在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;
      }
    }

这个:只有500s 内部重定向到“/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 个答案:

答案 0 :(得分:0)

  

“这是正确的吗?”

不。

1)Root永远不应该在一个位置块中,它应该只在一个服务器块中。

2)Apache重写用于测试是否某些东西是现有文件是使用try_files而非Nginx重写完成的。 See also

3)您的proxy_pass将被传递到同一服务器,该服务器必须是循环重定向。

4)你在位置区域内也有一个位置块,这看起来很奇怪。虽然某些高级配置可能需要这样做,但您不需要它来处理您正在做的事情。

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

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。