【问题标题】:Nginx configuration for clean urls干净 url 的 Nginx 配置
【发布时间】:2015-01-27 23:23:46
【问题描述】:

我有一个具有以下目录结构的网站:

.
├── assets
├── config
├── html
├── spec
└── vendor

我将其用作运行集成测试的开发设置,我需要一个服务器实例。我需要站点根目录位于 html 中,但我需要能够链接到 assets 中的资产。到目前为止,这就是我所拥有的,但它不起作用:

server {
    listen       9001;
    server_name  localhost;
    root /Users/hugo/src/feedback/www;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root /Users/hugo/src/feedback/www;
        index  index.html index.htm;
    }

    location /assets/ {
        root /Users/hugo/src/feedback/assets;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    # ... all the comments in the default config
}

正在提供页面,但找不到任何资产。它在看这里:

http://localhost:9001/assets/bootstrap/dist/css/bootstrap.min.css

更新

您对目录结构的假设是正确的。 我将配置更改为以下结果相同:

server {
    listen       9001;
    server_name  localhost;
    root /Users/hugo/src/feedback/www/html;
    index  index.html index.htm;

    location / {
    }

    location /assets/ {
        # I also tried using 'root' instead of 'alias' but same results
        alias /Users/hugo/src/feedback/www/assets;
    }
}

【问题讨论】:

    标签: url nginx server assets


    【解决方案1】:

    我看到您设置了root /Users/hugo/src/feedback/www,这对我来说意味着目录结构如下所示:

    www
    ├── assets
    ├── config
    ├── html
    ├── spec
    └── vendor
    

    如果这是正确的,那么也许您需要将您的资产位置块修改为此(添加www):

    location /assets/ {
        root /Users/hugo/src/feedback/www/assets;
    }
    

    【讨论】:

    • 我在尝试了您的解决方案后更新了答案。您对整个目录结构的看法是正确的。
    【解决方案2】:

    假设您实际上拥有 Blake Frederick 认为的 www 设置,那么您可以查看以下内容:

    server {
        listen 9001;
        server_name  localhost;
        root /Users/hugo/src/feedback/www/html;
        index  index.html index.htm;
    
        location / {
            # The root and index directives should typically 
            # not be in locations blocks
            # Minimum really is the server block.
            # Usually even better in http block.
        }
        location /assets/ {
            # What you need here is the alias directive
            alias /Users/hugo/src/feedback/www/assets/;
        }
    }
    

    【讨论】:

    • 我尝试了您的解决方案,但没有结果。我将更新发布为原始问题中的编辑。
    【解决方案3】:

    在玩了一会儿之后,我尝试了这个,它奏效了。

    server {
        listen       9001;
        server_name  localhost;
        root /Users/hugo/src/feedback/www/html;
        index  index.html index.htm;
    
        location /assets/ {
            root /Users/hugo/src/feedback/www;
        }
    }
    

    我非常喜欢 Dayo 的回答,因为在阅读了文档后,我觉得别名更适合我正在做的事情,但不幸的是它不起作用。

    【讨论】:

    • 两个答案之间没有实质性区别。也许您在尝试应用我的建议时输入错误。我注意到您编辑的问题遗漏了别名路径的结尾斜杠,由于我无法再回忆的原因,我总是认为有必要包括在内。
    • 我仔细检查了一切。它不适用于alias,但它适用于root。我什至尝试在别名路径的末尾添加斜杠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多