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

ser*_*eda 7 php .htaccess nginx

我试图将琐碎的htaccess文件转换为Nginx并且无法使其工作.它返回404错误.这是htaccess内容:

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

这是我目前的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;
}
}
Run Code Online (Sandbox Code Playgroud)

ame*_*iel 2

    \n
  1. 直接调用其他php文件怎么样?例如,一个 info.php 只有一个

    \n\n

    phpinfo();

    \n\n

    里面?

    \n\n

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

  2. \n
  3. \xc2\xbf你的 fastcgi 池正在监听那只袜子吗?\xc2\xbf你确定它没有监听端口 9000 吗?无论如何,我更喜欢在 http 部分定义上游并稍后在服务器部分使用它

    \n\n
    http {\n\n    upstream phpbackend {\n        server unix:/var/run/php5-fpm.sock;\n    }\n    ...\n\n\n    server {\n        ...\n        location ~ \\.php$ {\n            include       fastcgi_params;\n            fastcgi_pass  phpbackend;\n            fastcgi_param SCRIPT_FILENAME /var/www/domain.biz$fastcgi_script_name;\n        }    \n    }\n}\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
  5. 您确定您的 php.ini 将 cgi.fix_pathinfo 设置为 false 吗?

  6. \n
\n