所以,我正在用Gitbook建立一个网站。它遇到了Nginx配置问题。基本上,我想形成一个标准,当人们访问时:book.domain.com/book_name,它将重定向到该特定的书。但是,我对Nginx很新,我写的位置块不正确。我将在下面有目录树。
book/
├── [root 4.0K] _book/
│ ├── [root 4.0K] gitbook/
│ ├── [root 5.9K] index.html
│ └── [root 970] search_index.json
├── [root 4.0K] book_name
│ ├── [root 4.0K] _book/
│ │ ├── [root 4.0K] gitbook/
│ │ ├── [root 5.9K] index.html
│ │ └── [root 568] search_index.json
│ ├── [root 16] README.md
│ └── [root 40] SUMMARY.md
├── [root 45] README.md
└── [root 40] SUMMARY.md
值得一提的是本书下的_book是该网站的主要目录,我将有超链接重定向到其他书籍。 book_name下的_book将成为本书。
这是Nginx的配置,我认为$ uri中包含book_name,所以我只能访问$ uri下的_book文件夹并获取index.html文件。这将产生500错误。
server {
listen 80;
listen [::]:80;
server_name book.domain.com;
location /.well-known/acme-challenge {
root /var/www/domain.com/book/_book;
}
return 301 https://book.domain.com$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name book.domain.com;
ssl_certificate /etc/letsencrypt/live/book.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/book.domain.com/privkey.pem;
root /var/www/domain.com/book;
index index.html;
location / {
try_files _book/ $uri/_book/;
}
}
但是,我还尝试了另一种方法来添加另一个位置块来编写它,但它也无法正常工作。这会给我404错误。
location /book_name {
root /var/www/domain.com/book_name;
}
我在想也许重写是正确的方法吗?在编写位置块时真的很困惑。这样做的正确方法是什么?
新修改
我发现了一种显示页面的方法,但奇怪的是它没有正确地使用js和css进行渲染。我所做的更改如下:
location / {
try_files $uri/_book/index.html /_book/index.html =404;
}
所有js和css文件都在gitbook目录下。
gitbook
├── [root 4.0K] fonts
│ └── [root 4.0K] fontawesome
│ ├── [root 122K] FontAwesome.otf
│ ├── [root 75K] fontawesome-webfont.eot
│ ├── [root 382K] fontawesome-webfont.svg
│ ├── [root 149K] fontawesome-webfont.ttf
│ ├── [root 88K] fontawesome-webfont.woff
│ └── [root 70K] fontawesome-webfont.woff2
├── [root 103K] gitbook.js
├── [root 4.0K] gitbook-plugin-fontsettings
│ ├── [root 6.3K] fontsettings.js
│ └── [root 8.4K] website.css
├── [root 4.0K] gitbook-plugin-highlight
│ ├── [root 2.8K] ebook.css
│ └── [root 31K] website.css
├── [root 4.0K] gitbook-plugin-lunr
│ ├── [root 15K] lunr.min.js
│ └── [root 1.6K] search-lunr.js
├── [root 4.0K] gitbook-plugin-search
│ ├── [root 15K] lunr.min.js
│ ├── [root 974] search.css
│ ├── [root 1.2K] search-engine.js
│ └── [root 6.2K] search.js
├── [root 4.0K] gitbook-plugin-sharing
│ └── [root 2.8K] buttons.js
├── [root 4.0K] images
│ ├── [root 4.7K] apple-touch-icon-precomposed-152.png
│ └── [root 4.2K] favicon.ico
├── [root 51K] style.css
└── [root 111K] theme.js
在index.html中,有一些指向nessary文件的链接。
如果我没有在try_files之后放入index.html,该页面将向我返回404错误。但是,通常它会使用css和js加载页面。
答案 0 :(得分:0)
rstr()
文件位于index.html
,资源文件与之相关。
您当前使用/var/www/domain.com/book/<book_name>/_book/index.html
的解决方案将与索引文件一起使用,但无法找到资源。
一种解决方案是将所需的URI重定向到包含try_files
组件的URI,然后使用简化的_book
语句查找索引和资源文件:
try_files
第一个位置块处理包含index index.html;
root /var/www/domain.com/book;
location ~ /_book/ {
try_files $uri $uri/ =404;
}
location / {
rewrite ^(.*?)/?$ $1/_book/ redirect;
}
组件的URI,该组件是_book
文件和所有资源文件的最终URI。
第二个位置区将index.html
重定向到//book.domain.com/book_name
。
有关详情,请参阅https://docs.python.org/2/library/glob.html。
以下解决方案使用//book.domain.com/book_name/_book/
将alias
插入路径名中,以便它不会显示在公开的URI中。
但是,主目录索引和资源文件的URI是不明确的,例如:_book
是指主目录的资源文件还是名为“gitbook”的书? /gitbook/search_index.json
要求URI明确无误。
因此,以下解决方案仅在主目录的URI中使用nginx
。
/_book/
有关详情,请参阅this document。