Назад | Перейти на главную страницу

Перепишите подкаталог в корневой каталог на nginx

скажем, у меня есть сайт http://domain/ и я помещаю несколько файлов в подкаталог /html_root/app/ и я использую следующее правило перезаписи, чтобы переписать эту папку в свой корень:

location / {
    root /html_root;
    index index.php index.html index.htm;

    # Map http://domain/x to /app/x unless there is a x in the web root.
    if (!-f $request_filename){
        set $to_root 1$to_root;
    }
    if (!-d $request_filename){
        set $to_root 2$to_root;
    }
    if ($uri !~ "app/"){
        set $to_root 3$to_root;
    }
    if ($to_root = "321"){
        rewrite ^/(.+)$ /app/$1;
    }

    # Map http://domain/ to /app/.
    rewrite ^/$ /app/ last;
}

Я знаю, что это не умный способ, потому что у меня есть другой подкаталог /html_root/blog/ и я хочу, чтобы к нему можно было получить доступ http://domain/blog/.

Моя проблема в том, что указанное выше правило перезаписи работает нормально, но все еще есть некоторые проблемы: если я получаю доступ

http://domain/a-simple-page/ (Это переписано с http://domain/app/a-simple-page/)

он работает нормально, но если я получу доступ

http://domain/a-simple-page (без косой черты), он перенаправляет на исходный адрес:

http://domain/app/a-simple-page/,

Есть ли способ перенаправить URL без косой черты, следуя моему правилу?

Классический случай следовать неверному руководству, а не чтение вики Я настоятельно рекомендую прочитать о функциях, которые вы (должны) использовать (например, location и try_files), а также мой праймер Nginx поскольку вы полностью упускаете из виду основы Nginx.

Я попытался написать то, что вы хотите, в надлежащем формате, но я не могу обещать, что это сработает, так как я не уверен, что действительно понимаю, что вы пытаетесь сделать, тем не менее, это должно дать вам основу для начала .

server {
    listen 80;
    server_name foobar;

    root /html_root;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ @missing;
    }

    location /app {
        # Do whatever here or leave empty
    }

    location @missing {
        rewrite ^ /app$request_uri?;
    }
}