如何使用路由并在nginx中具有与路由相同的目录名?

时间:2017-09-22 13:42:34

标签: php nginx

我有以下结构中的文件

index.php
help.php
help\helpone.php
help\helptwo.php

如果我访问something.com,我会被带到正确的索引页面,并从最后删除.php。当我转到something.com/help时,nginx会抛出403.这是因为同一目录中有一个帮助文件夹。要求是访问something.com/help以查看帮助页面

帮助页面包含指向其他页面的链接,因此单击它会成为某个问题/ help / help

我有以下服务器块来执行操作。

server {
        root /usr/share/nginx/landing;
        server_name sample.com;
        index index.php index.html;

        location / {
            try_files  $uri/ $uri.php$is_args$query_string;
        }

        location ~ \.php {
            fastcgi_pass 127.0.0.1:9000;
            include fastcgi_params;
            fastcgi_index index.php;
        }
}   

如何在不获取403

的情况下获取sample.com/help

2 个答案:

答案 0 :(得分:1)

那是因为首先尝试帮助/目录,而不是help.php文件。里面没有index.php,因此显示403错误。

尝试:

    location / {
        try_files $uri.php$is_args$query_string $uri/;
    }

或者更改help.php文件或目录的名称。

答案 1 :(得分:0)

因此,此问题的解决方案是将根目录中的help.php移动到help\index.php这样,Nginx将直接在文件夹help中查找index.php而不是冲突在外面的help.php和执行禁止访问的文件夹help之间。

现在转到sample.com/help会直接进入sample.com/help/index.php,而不会向您展示index.php当然。

附加nginx块以供参考,但没有太大变化。

index index.php index.html;

location / {
    try_files  $uri/ $uri.php;
}

location ~ \.php {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_index index.php;
    }

文件夹结构

 index.php
 help\index.php
 help\help1.php
 help\help2.php

输出 sample.com转到sample.com/index.php&没有显示/index.php所以UX也很满意!