我在这台单服务器上运行了几个虚拟主机(站点)。
现在,在这个根虚拟主机上,我有一个论坛(在 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
/amp
mysite.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=1
和mysite.com?amp=1
这在 Nginx 中不可能吗?