PHP 网站在 NGINX 中无法按预期运行,但在 Apache 中可以运行

PHP 网站在 NGINX 中无法按预期运行,但在 Apache 中可以运行

嗨,我刚刚创建了一个链接缩短应用程序。但当我尝试将缩短链接重定向到 Facebook 上分享的完整 URL 时,它无法按预期工作。例如:https://bowa.me/c8443此链接工作正常,但如果我在 Facebook 上分享该链接,链接将如下所示 https://bowa.me/c8443?fbclid=IwAR0Zm8bGRgrbpQTUX_aVXxTMNFq6-MlRFe0j8e_7wm4anbWmvArPlyDaAHI此链接未重定向

nginx 配置

location / {
            try_files $uri $uri/ /index.html /index.php;

    }

    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
         }

        location ~ /\.ht {
            deny all;
      }

    if (!-e $request_filename) {
            rewrite ^/admin/(.*)?$ /admin/index.php?a=$1 break;
            rewrite ^/(.*)$ /index.php?a=$1 last;
            break;
    }

答案1

在 nginx 中,应该遵循 nginx 最佳实践,而不是尝试将 Apache2 实践转换为 nginx。这是解决各种问题的良方。

您应该尝试以下方法:

# block for processing PHP files
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}

location ~ /\.ht {
    deny all;
}

# Capture part after admin to variable and use in try_files
location ~ ^/admin/(.*)$ {
    try_files $uri $uri/ /admin/index.php?a=$1;
}

# Default location, capture URI part and use as argument
location ~ ^/(.*)$ {
    try_files $uri $uri/ /index.php?a=$1;
}

顺序很重要,nginx 使用location它找到的块中第一个正则表达式匹配。

相关内容