nginx 下 drupal 8 | 9升级提示 update.php/selection not found

By 季宏言 |

通常在网站更新后,需要将网站设置成维护模式,然后浏览器访问yourdomain/update.php来完成更新,通常对/update.php正常,但是跳转/update.php/selection后就会出现Not found(404)的情况。

在Nginx环境下,这个问题很大几率是有conf配置不当引起的。

因为一般教程里配置php都只是用location ~ \.php$ 

但 "/update.php/selection"是以"selection"结尾的。这就导致的Nginx会把它重写成index.php?q=/update.php/selection。可想而知肯定是找不到此位置的。

解决的办法是在drupal 8 伪静态文件中添加几行代码,最终完整的rewrite代码如下:

if (!-e $request_filename) {
  rewrite ^/update.php(.*)$ /update.php?q=$1 last;
  rewrite ^/(.*)$ /index.php?q=$1 last;

}

location ~ ^/(index|update)\.php(/|$) {
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;

include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_intercept_errors on;
}

保存后,停止并重新启动nginx服务,顺利升级。

Add new comment

此字段内容将保密,不会被其他人看见。