使用 nginx 重定向 URL 时出现“未指定输入文件”的错误

使用 nginx 重定向 URL 时出现“未指定输入文件”的错误

我正在尝试在我的 /etc/nginx/sites-enabled/mydomain.com 配置文件中使用以下行。

rewrite ^/(\w+)$ ./index.php?filename=$1 last;

它使 URL 保持简短并允许我从 index.php 中包含一些内容,并且它将应用于每个文件。

当我使用 apache 和 .htaccess 文件时,它工作正常,但是当我将其切换到 nginx 时,似乎 php-fastcgi 没有处理请求,因为它没有以 .php 结尾

我认为我应该调整同一文件中的以下部分。

    location ~ \.php$ {
            root /home/mydomain/public_html;
            fastcgi_pass localhost:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
    }

有什么建议吗,或者我应该恢复到 Apache?

而且我还发现,当发布到重写的 URL 时,变量没有被收到。似乎在重写过程中丢失了。

答案1

删除句点并添加参数以保持查询字符串变量不变。

rewrite ^/(\w+)$ /index.php?filename=$1&$args last;

答案2

您的 SCRIPT_FILENAME 路径没有问题,因此这意味着 PHP 没有权限读取 PHP 文件。首先找出您的 PHP 进程以哪个用户/组运行(您可以在配置文件中或通过运行查看ps aux | grep "php"

接下来,您需要检查文件本身的权限,确保运行 PHP 的用户或组具有适当的权限。如果这些都没有问题,则检查完整目录路径,并确保用户或组对该目录具有执行权限,因为进程需要执行权限才能进入该目录。

最后,阅读 h0tw1r3 的答案并修复您的重写。:)

编辑:刚刚注意到你重写中的句号,我认为这实际上最有可能,所以如果其他答案解决了你的问题,你可以忽略这一点。

相关内容