如何在 Nginx 上使用查询参数 ?amp=1 提供 PHP 服务?

如何在 Nginx 上使用查询参数 ?amp=1 提供 PHP 服务?

我在这台单服务器上运行了几个虚拟主机(站点)。

现在,在这个根虚拟主机上,我有一个论坛(在 Docker 上运行),但由 Nginx 提供服务mysite.com,并且我的 AMP 页面在/amp路由 上提供服务mysite.com/amp。这些 AMP 页面基本上是一个单独的index.php文件,它们都由这个文件处理。它们由 PHP 使用 Nginx 提供服务。

我想要的是,当用户点击任何符合以下模式的请求时:(例如此域名上的任意 URL结尾为?amp=1

mysite.com?amp=1

mysite.com/t/my-topic/121?amp=1

mysite.com/c/CategoryCaseInsensitive/13?amp=1

mysite.com/u/john?amp=1

mysite.com/u/john/summary?amp=1

然后

我想重定向此请求并将其发送到我的 AMP 页面(该页面在 PHP 文件上运行,然后将由 提供/处理)。现在正在提供 PHP 代码,但我想在 上提供它,index.php因此任何前面的 URL/var/www/amp/ampmysite.com?amp=1?amp=1

我已经尝试过此代码但它似乎并不适用于所有情况:

#if ($arg_amp) {
#   return 302 /amp$request_uri;
#}

以下是我当前的该虚拟主机的 NGINX 配置文件:

    #Vhost Config Server, serving Ruby on Rails App on Docker on domain root
server {
    listen 443 ssl http2;
    ssl on;
    ssl_certificate         /var/www/cert/mysite.pem;
    ssl_certificate_key     /var/www/cert/mysite.key;


    server_name mysite.com www.mysite.com;
    location / {
        proxy_ssl_server_name       on;
        proxy_pass       http://localhost:PORT;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_redirect off;

        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;
       
       #if ($arg_amp) {
       #   return 302 /amp$request_uri;
       #}

    } 
    #Serving PHP code on /AMP route
    location @amp {
           rewrite ^/amp(.*) /amp/index.php?q=$1;
        }
    #will match any prefix for amp, amping, or amp/anything/any  

    location /amp {

    index index.php;
    try_files $uri $uri/ @amp;
    alias /var/www/amp;

#PHP config for Nginx
     location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        }

}
    #/amp route ends
}

上述配置在和mysite.com/amp/t/topic-name/123上的URL 上工作正常(并提供 PHP 服务) mysite.com/amp,但我希望它能适用于mysite.com/t/topic-name/123?amp=1mysite.com?amp=1

这在 Nginx 中不可能吗?

相关内容