首页 > 解决方案 > url中的nginx重写子文件夹不起作用

问题描述

我有一个以前是 apache 的站点,但由于某些情况,我必须转移到 vps 并改用 nginx。我几乎是 nginx 的菜鸟

我的文件夹结构是

root/pages/[我所有的页面文件,包括索引]

我想删除 url 中的 pages 文件夹,

所以从

1. mydomain.net/pages/index.php
2. mydomain.net/pages/subpage.php

1. mydomain.net
 2. mydomain.net/subpage

在阿帕奇我使用:

RewriteEngine On

#remove php file extension-e.g. https://example.com/file.php will become https://example.com/file 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L] 

#remove folder name on link e.g. https://example.com/pages/file.php will become https://example.com/file.php 
RewriteRule ^$ pages/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ pages/$1 [NC,L] 

现在我尝试使用这些代码将其更改为 nginx

server {


        root /var/www/html;
        index pages/index.php;
        server_name mydomain.net www.mydomain.net;

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

        #deny htaccess
        location ~ /\.ht {
                deny all;
        }                                                                                                                        
        
        # remove .php extension in url
        location @extensionless-php {
            rewrite ^(.*)$ $1.php last;
        } 
        
        # supposed to remove pages folder in url 
        location /pages
        {   
            rewrite ^/pages(/.*)$ $1 last;
        }  
}  

mydomain.net工作正常

但不知何故,我在mydomain/subpage中遇到了 404 错误

标签: nginx

解决方案


推荐阅读