有一点背景知识,我基本上希望某些站点通过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来工作,但它们似乎正在使用竞争的索引文件。我的角度使用index.html,而wordpress使用index.php(同时,如果我没记错的话,会劫持其目录中的所有其他调用)。这是我用于wordpress的nginx文件:
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,因此我知道该位置可以正常工作。实际上,直到在/index.html
行的末尾添加try_files
为止,我一直遇到nginx 404错误。这使我相信try_files /index.html
不会以某种方式重定向到wordpress(被劫持)。反之亦然。在角度/关键字之间,在location / {}
中设置了hichever,它为应该由另一个定义的位置确定了404。
有没有一种方法可以防止wordpress / angular劫持所有“索引”文件?
答案 0 :(得分:0)
我很支持Richard Smith的评论。基本上,据我所知,Wordpress正在使用我在index
中定义的所有内容,其中包括index.html
(角度项目的根)。为了避免这种情况,我专门告诉nginx将index.html请求路由到angular。
location = index.html {
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;
}
这迫使所有通过index.html进行的路由都被路由到我的角度应用程序。进行此更改后,我可以将特定链接定向到angular,同时将默认路由(也称为其他任何路由)保留给wordpress。但是,这还会导致其他错误。所有的js / css / etc文件仍然通过wordpress路由。这就是我所做的(尽管可能有更简单的方法)。
location ~* .(js|css|png|jpg|jpeg|svg|otf)$ {
root /path/to/angular-project/dist;
try_files $uri @wordpress_files;
}
location @wordpress_files {
root /var/www/website.com;
try_files $uri $uri/ $uri$args;
}
完成此操作后,我的网站将尝试先查找角度特定的文件。如果失败,它将加载wordpress的版本。如果文件具有相同的名称,则无法解决此问题,但是如果是这样,则希望它们具有相同的版本,因此可以安全地加载其中任何一个。