簡體   English   中英

Nginx 重寫目錄並排除子目錄

[英]Nginx rewrite directory and exclude a subdirectory

這是我當前的 nginx 配置文件。

server {
    listen 6063;

    root /var/www/html/project;
    index index.php;

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

    rewrite ^/admin/(.*)$ /admin/index.php break;
}

對 /admin 的任何訪問都將重寫到 /admin/index.php。

現在由於某些原因,我必須將 css 文件夾、js 文件夾添加到 /var/www/html/project/admin/includes。

所以新的要求是對 /admin/includes/* 的任何訪問都將訪問 css 和 js 的真實文件。 所有其他訪問/admin/*(不是/admin/includes)將重寫到/admin/index.php。

或者我可以說任何對文件夾 /admin 的訪問(如果不存在)(如 /admin/includes/css/example.css),然后重寫為 /admin/index.php

謝謝,

好的,我找到了答案。

location /admin {
    if (!-e $request_filename) {
        rewrite (.*)$ /admin/index.php last;
    }
}

如果對不存在的文件夾 /admin 的任何訪問(它不是像 css 或 js 文件這樣的真實文件)將重寫到 /admin/index.php。

Nginx 使用最長的匹配位置( 參見文檔),因此提供更具體的位置指令就足夠了:

server {
    …

    location ~ /admin/css {
    }

    location ~ /admin {
       rewrite (.*)$ /admin/index.php last;
    }
}

然后,如果有任何匹配/admin/css ,它將只處理空塊(因此默認提供服務),並且所有匹配/admin (而不是/admin/css )將命中重寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM