php - $script_filename 导致 nginx 配置错误
问题描述
我正在使用一个相当旧的 php 脚本,它建议将此指令放在 nginx 配置中
location / {
if ($script_filename !~ "-d"){
rewrite ^(.*)$ /index.php break;
}
}
但这会导致我的错误nginx version: nginx/1.14.0 (Ubuntu)
Sep 14 11:19:22 pc5 systemd[1]: Starting A high performance web server and a reverse proxy server.
Sep 14 11:19:22 pc5 nginx[12497]: nginx: [emerg] unknown "script_filename" variable
Sep 14 11:19:22 pc5 nginx[12497]: nginx: configuration file /etc/nginx/nginx.conf test failed
Sep 14 11:19:22 pc5 systemd[1]: nginx.service: Control process exited, code=exited status=1
Sep 14 11:19:22 pc5 systemd[1]: nginx.service: Failed with result 'exit-code'.
Sep 14 11:19:22 pc5 systemd[1]: Failed to start A high performance web server and a reverse proxy
~
这是我的完整站点配置(在本地主机上运行)
server {
listen 8000;
root /var/www/myapp;
index index.php index.html index.htm index.nginx-debian.html;
#server_name example.com;
autoindex off;
location / {
if ($script_filename !~ "-d"){
rewrite ^(.*)$ /index.php break;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
如果我删除该指令,许多路径都无法访问,而是得到 404。
正如您在我的fastcgi.conf I have no
$script_filename` 参数中看到的:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
并且fastcgi-php.conf
:
# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
我想知道我该如何解决这个问题?
解决方案
推荐阅读
- flutter - 当我在颤振的模型类中传递 **context** 时出现此错误 -
- reactjs - 保持前一步打开 Vertical Stepper Material-UI
- python - ValueError:时间数据“2020 年 10 月 5 日”与格式“%b %d,%Y”不匹配
- c++ - 检查 std::chrono 持续时间的惯用方法小于 0
- r - 滚动多元回归面板数据
- java - java.lang.IllegalArgumentException:找到多个名为 [org_apache_tomcat_websocket] 的片段
- express - 如何使用快速中间件记录“状态”?
- css - 响应式 CSS - 如何将 li 项目置于底部,在桌面中将 li 项目置于顶部
- android - OKHTTP 错误“无法解析主机“...”:没有与主机名关联的地址”
- tensorflow - ModelCheckpoints (tf.Keras) 的文件路径中可以使用哪些参数?