#php #nginx
#php #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
~
Вот моя полная конфигурация сайта (выполняется на localhost)
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;
Мне интересно, как я могу это исправить?
Комментарии:
1. В этом файле также нет
$script_filename
. Итак, как это должно помочь?2. Этот совет — бессмыслица. Попробуйте:
location / { try_files $uri $uri/ /index.php$is_args$args; }