nginx 使用不同的文件夹读取 index.html 和 index.php

nginx 使用不同的文件夹读取 index.html 和 index.php

我的域名 nginx 配置如下所示:

    server {
    listen *:80;


    server_name mywebsite.org ;

    root   /var/www/mywebsite.org/web;



    index index.html index.htm index.php index.cgi index.pl index.xhtml;



    error_page 400 /error/400.html;
    error_page 401 /error/401.html;
    error_page 403 /error/403.html;
    error_page 404 /error/404.html;
    error_page 405 /error/405.html;
    error_page 500 /error/500.html;
    error_page 502 /error/502.html;
    error_page 503 /error/503.html;
    recursive_error_pages on;
    location = /error/400.html {

        internal;
    }
    location = /error/401.html {

        internal;
    }
    location = /error/403.html {

        internal;
    }
    location = /error/404.html {

        internal;
    }
    location = /error/405.html {

        internal;
    }
    location = /error/500.html {

        internal;
    }
    location = /error/502.html {

        internal;
    }
    location = /error/503.html {

        internal;
    }

    error_log /var/log/ispconfig/httpd/mywebsite.org/error.log;
    access_log /var/log/ispconfig/httpd/mywebsite.org/access.log combined;

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location /stats/ {

        index index.html index.php;
        auth_basic "Members Only";
        auth_basic_user_file /var/www/clients/client0/web15/web/stats/.htpasswd_stats;
    }

    location ^~ /awstats-icon {
        alias /usr/share/awstats/icon;
    }

    location ~ \.php$ {
        try_files /b55a31c419b809eb02d1c0a0c8f6e014.htm @php;
    }

    location @php {
      #  try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/lib/php5-fpm/web15.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
    }




    location / {
    root /var/www/mywebsite.org/web/mainpage;
                try_files $uri $uri/ /index.php?$args;
    }

}

此配置是使用 ISPConfig 面板的默认配置,我只是添加了“location /”指令,因为我的网站位于文件夹/mainpage 中。

我的问题:如果 index.php 位于文件夹 /mainpage 中,则 nginx 不会读取它,而是读取上一个文件夹“/web”中的 index.php如果我将文件 index.html 放入文件夹 /mainpage 中,服务器将正确读取它... 对我来说,这种行为很奇怪。为什么服务器可以正确读取 /mainpage 中的文件 index.html,但在同一文件夹中的 index.php 中却不行。删除/重命名文件夹 /mainpage 中的文件 index.html 后,服务器会自动读取上级文件夹“/web”中的文件 index.php。不想读取 /mainpage 文件夹中的 index.php。

答案1

index.htmllocation /仅匹配,但index.php匹配location ~ \.php$,然后由处理location @php。请参阅文档用于 nginxlocation指令匹配顺序。

您可以尝试通过替换来解决您的$document_root问题location @php/var/www/mywebsite.org/web/mainpage

相关内容