Я пытаюсь пропустить весь трафик на месте ^/[a-z0-9]{24}$
в index.html из другого корневого каталога. Моя конфигурация настроена так:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
root /Users/me/sites/store_front/static;
index index.html;
try_files $uri $uri/ $uri.html =404;
location ~ "^/[a-z0-9]{24}$" {
alias /Users/me/web_app/static;
try_files $uri index.html;
}
}
По какой-то причине, когда я скручиваю этот URL, я получаю 404:
$ curl -I https://example.com/55c898e7faa137f42409d403
HTTP/1.1 404 Not Found
Server: nginx/1.8.0
Content-Type: text/html; charset=UTF-8
Content-Length: 168
Connection: keep-alive
Кто-нибудь знает, как заставить работать этот псевдоним?
Одно предостережение заключается в том, что мне нужно, чтобы все относительные URL-адреса в index.html загружались правильно:
<link href="/styles/main.css" rel="stylesheet" type="text/css"
<script src="/javascript/main.js"></script>
Эти файлы действительно существуют в web_app
каталог, но nginx пытается загрузить их из store_front
Спасибо
Указывая ^/[a-z0-9]{24}$
к index.html
это легко. Файлы ресурсов /styles/main.css
и /javascript/main.js
необходимо иметь уникальные URI, иначе nginx
не знает, какие файлы обслуживать.
Если /styles
и /javascript
префикс также используется store_front, вам нужно будет изолировать отдельные файлы:
location = /styles/main.css {
root /Users/me/web_app/static;
}
location = /javascript/main.js {
root /Users/me/web_app/static;
}
location ~ "^/[a-z0-9]{24}" {
root /Users/me/web_app/static;
rewrite ^ /index.html break;
}
Если /styles
, /javascript
и ^/[a-z0-9]{24}$
Все URI уникальны, вы можете объединить приведенное выше в одном месте:
location ~ "^/([a-z0-9]{24}|styles|javascript)" {
root /Users/me/web_app/static;
rewrite "^/[a-z0-9]{24}$" /index.html break;
}
Или даже:
location ~ "^/([a-z0-9]{24}|styles/main.css|javascript/main.js)" {
root /Users/me/web_app/static;
rewrite "^/[a-z0-9]{24}$" /index.html break;
}