Я успешно настроил Django, angularjs и phantomJS (для целей SEO) для совместной работы, однако у меня возникла небольшая проблема с маршрутами.
http: // something.com/?_escaped_fragment_= переписывается правильно, и я получаю визуализированный снапшоп моей страницы (обслуживаемый phantomJS), однако http: // something.com/news/?_escaped_fragment_= не работает, и я получаю 404 не обнаружена ошибка.
Без части _escaped_fragment_ оба сайта обнаруживаются и отображаются правильно.
Вот моя конфигурация nginx:
server {
listen 80;
server_name something.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/folder/project;
}
root /home/folder/project/frontend/;
index index.html;
if ($args ~ _escaped_fragment_) {
rewrite ^ /snapshot$uri;
}
location ~ ^/snapshot(.*) {
rewrite ^/snapshot(.*)$ $1 break;
# I commented out this line to test why PhantomJS wasn't rendering pages
# such as /news correctly
#proxy_pass http://something.com:8888;
proxy_set_header Host $host;
proxy_connect_timeout 60s;
}
location / {
#proxy_set_header Host $http_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
#proxy_pass http://unix:/home/folder/project/project.sock;
try_files $uri $uri/ /index.html;
}
location /admin/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/folder/project/project.sock;
}
}
Что мне не хватает?
РЕДАКТИРОВАТЬ: в основном проблема в том, что URL-адрес запроса, проходящий через phantomJS, имеет форму http: // something.comnews (обратите внимание на отсутствие /)
Что ж, похоже, измените перезапись для phantomJS на это:
rewrite ^/snapshot(.*)$ /$1 break;
сделали свое дело.