Немного предыстории, я хочу, чтобы некоторые сайты работали через WordPress, а другие части - через Angular 7.
Таким образом, website.com
перейдет на домашнюю страницу WordPress и website.com/signin
перейдет на угловой сайт. Это возможно? Я играл с настройкой nginx, и это то, что я до сих пор. К сожалению, это заставляет все проходить через сайт WordPress, поэтому когда я нажимаю /signin
, я получаю WordPress 404.
Маршрутизация является более сложной, чем этот, идеальным сценарием было бы создание белого списка определенных путей и маршрутизация их в угловые, а также маршрутизация чего-либо еще в wordpress (для этого относительно универсального 404). Например,
website.com/signin --
website.com/users/:id |
website.com/signout |- all of these route to angular
website.com/otherModels/:id |
website.com/another --
website.com/everything-else-goes-to-wordpress
Я могу использовать WordPress или Angular, но они, похоже, используют конкурирующие индексные файлы. Мой angular использует index.html, а wordpress использует index.php (хотя, если я не ошибаюсь, угоняю все остальные вызовы в своем каталоге). Вот файлы nginx, которые я использую для wordpress:
server {
root /var/www/website.com;
index index index.html index.php index.htm index.nginx-debian.html;
server_name website.com;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_buffers 8 16k; # increase the buffer size for PHP-FTP
fastcgi_buffer_size 32k; # increase the buffer size for PHP-FTP
fastcgi_connect_timeout 60;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
И угловой:
server {
root /path/to/angular-project/dist;
index index index.html index.php index.htm index.nginx-debian.html;
server_name website.com;
location / {
proxy_pass http://localhost:4200;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
try_files $uri $uri/ $uri$args /index.html;
}
}
Очевидно, что я могу добавить местоположения в другие файлы, но когда я это сделаю, то, что настроено в location / {}
, работает, а другое - нет. Например, если я изменю файл WordPress, чтобы он содержал:
location = /signin {
root /path/to/angular-project/dist; // I've tried using alias as well
proxy_pass http://localhost:4200;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
try_files $uri $uri/ $uri$args /index.html;
}
Ничего не происходит. Я все еще получаю свой WordPress 404 (вместо углового сайта). Я могу изменить приведенный выше фрагмент на location = /signin { return 404; }
и получить nginx 404, поэтому я знаю, что расположение работает правильно. На самом деле я получаю ошибку nginx 404 до тех пор, пока не добавлю /index.html
в конец строки try_files
. Это заставляет меня поверить, что try_files /index.html
почему-то не перенаправляется на (угоняется) WordPress. Это происходит и в обратном направлении. Между angular / wordpress, hichever установлен в location / {}
, определяет 404 для местоположений, которые должны быть определены другим.
Есть ли способ предотвратить захват wordpress / angular всех "индексных" файлов?