使用带有Nginx的try_files将所有对非现有文件的请求重写为index.php

时间:2013-12-16 01:02:03

标签: php .htaccess nginx

我正在尝试将简单的htaccess文件转换为Nginx,但无法使其正常工作。它返回404错误。 这是htaccess内容:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

这是我目前的nginx配置:

server {
listen 80;
server_name domain.biz;
root /var/www/domain.biz;
charset utf-8;
autoindex off;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include        fastcgi_params;
fastcgi_pass   unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME /var/www/domain.biz$fastcgi_script_name;
}
}

1 个答案:

答案 0 :(得分:2)

  1. 你直接调用的其他php文件怎么样?例如,只有

    的info.php

    的phpinfo();

    我问这个是因为你的服务器conf似乎正好使用了try_files,但我不确定你是否正确使用php脚本。

  2. ¿你的fastcgi池在听袜子吗? ¿你确定它没有在端口9000中监听吗?无论如何,我更喜欢在http部分定义一个上游,稍后在服务器部分使用它

    http {
    
        upstream phpbackend {
            server unix:/var/run/php5-fpm.sock;
        }
        ...
    
    
        server {
            ...
            location ~ \.php$ {
                include       fastcgi_params;
                fastcgi_pass  phpbackend;
                fastcgi_param SCRIPT_FILENAME /var/www/domain.biz$fastcgi_script_name;
            }    
        }
    }
    
  3. 你确定你的php.ini有cgi.fix_pathinfo设置为false吗?