Nginx位置规则不适用

时间:2019-02-28 00:20:14

标签: nginx server location

我想在一个由NGINX服务器块(不是默认站点)配置的域上同时运行WordPress和YOURLS。由于两者都需要以不同的方式处理URL,因此它们需要不同的try_files伪指令。 WordPress位于域(domain.tld)的根目录上,而YOURLS则安装在/ g /目录中。尽管有两个位置规则,但是尽管可以访问管理后端,但在YOURLS生成的任何链接上(例如domain.tld / g / linkname,所有链接都重定向到外部URL),我都会得到404。 据我所读,声明位置规则(一个用于/ g /,一个用于/)应该足以让NGINX以不同的方式处理直接URL和/ g / URL-我的想法有问题吗? try_files规则正确无误,并且在其他单一应用程序服务器块(WordPress以及单独服务器块上的YOURLS安装)上也能很好地工作。

服务器块定义配置如下:

server {
	listen [::]:80;
	listen 80;

	server_name domain.tld www.domain.tld;

	return 301 https://domain.tld$request_uri;

}

server {
	listen [::]:443 ssl;
	listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";


	root /var/www/html/domain.tld;

	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html index.php;

	server_name domain.tld www.domain.tld;

	location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
	}

	location /g/ {
    	try_files $uri $uri/ /yourls-loader.php$is_args$args;
        expires 14d;
        add_header Cache-Control 'public';
	}

	location / {
		try_files  $uri $uri/ /index.php?$args;
	}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	location ~ /\.ht {
		deny all;
	}
}

1 个答案:

答案 0 :(得分:0)

/ g / try_files指令的问题在于,YOURLS加载程序的路径不正确。如果URL处理程序(yourls-loader.php)位于/ g目录中,则必须更改其路径以包含/g目录:

try_files $uri $uri/ /g/yourls-loader.php$is_args$args;

位置规则并不意味着也从该位置处理每个路径,而是从上面给出的根路径进行处理。