Nginx 重写规则 - 多位置 PHP

Nginx 重写规则 - 多位置 PHP

一个解决了,还剩一个!我完全理解之前配置的所有错误,并再次感谢 Stack Overflow 上的 Cemal。/location/ 现在显示的是 index.php。

新的问题是重写规则。它们目前是全局设置的,每个位置都需要做同样的事情(它们是重复的 PHP 前端,但其中一个对某些内容的访问权限受到限制。)

目前,主 domain.com 可以工作,但 mydomain.com/test 正在加载主 PHP,但不会传递重写的数据。我找到了一种让它与尝试文件一起工作的方法,但我很难使用正则表达式的建议让它工作找到这里

无需尝试,以下操作会导致无法在 nginx 中找到 raw_data 或 general_data 的错误,尽管这些文件存在,所以我只能假设它必须是重写规则。

我克隆了现有的重写规则并在其前面加上 /test2/,但仍然无法找到它们。

2018/02/27 13:37:46 [错误] 31485#31485: *49483 打开()

"/var/www/html/test2/general_data" failed (2: No such file or
directory), client: X.X.X.X, server: mydomain.co.uk, request: "POST
/test/weather_data?cell HTTP/1.1", host: "mydomain.co.uk", referrer:
"https://mydomain.co.uk/test2/" 2018/02/27 13:37:46 [error]
31485#31485: *49546 open() "/var/www/html/test/raw_data" failed (2: No
such file or directory), client: X.X.X.X, server: my domain.co.uk,
request: "POST /test/raw_data HTTP/1.1", host: "mydomain.co.uk",
referrer: "https://mydomain.co.uk/test2/"

无论如何,这个错误导致我得出结论。

这是我当前的配置相关部分-

}server {

    rewrite ^/raw_data$ /raw_data.php?$1 last;
    rewrite ^/test_data$ /test_data.php?$1 last;
    rewrite ^/motd_data$ /motd_data.php?$1 last;
    rewrite ^/(.*)map.common.js$ /static/js/map.common.php last;
    rewrite ^/general_data$ /general_data.php?$1 last;

    rewrite ^test2/raw_data$ /test2/raw_data.php?$1 last;
    rewrite ^test2/test_data$ /test2/test_data.php?$1 last;
    rewrite ^test2/motd_data$ /test2/motd_data.php?$1 last;
    rewrite ^test2/(.*)map.common.js$ /PMSFE/static/js/map.common.php last;
    rewrite ^test2/general_data$ /PMSFE/general_data.php?$1 last;



    location / {
    include /etc/nginx/mime.types;
        index index.php index.html index.htm;
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
            fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
      }
    }

    location /test2 {
    include /etc/nginx/mime.types;
    root /var/www/html/;
        index index.php index.html index.htm;
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
            fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
      }
    }

任何关于如何实现这个工作的建议都将非常感谢,这是我第一次使用Linux,更不用说尝试托管一些实质性的东西,不幸的是你发现的nginx示例是如此不同,很难判断什么适用于你的特定情况。

我尝试在每个位置都包含重写规则,就像我在另一篇文章中看到的那样,但这会破坏 mydomain.co.uk 页面,并出现与新的 mydomain.co.uk/test2/ 相同的错误

答案1

我太傻了。我的重写太短了。

rewrite ^/test2/raw_data$ /test2/raw_data.php?$1 last;
rewrite ^/test2/test_data$ /test2/test_data.php?$1 last;
rewrite ^/test2/motd_data$ /test2/motd_data.php?$1 last;
rewrite ^/test2/(.*)map.common.js$ /PMSFE/static/js/map.common.php last;
rewrite ^/test2/general_data$ /PMSFE/general_data.php?$1 last;

现在有效!

相关内容