我的nginx配置使用server_name _;以便在单个服务器{}块中处理所有域,并将它们全部定向到同一个代码库,该代码库位于具有单个index.php的单个文件夹中,用于整理域路由。 (这就是Web框架可在单个群集中与100多个域一起使用的方式-无法更改)。
其中一个站点具有2个域。我们将每种语言分别称为example.com和example.net。该站点还具有特定于语言的子文件夹,我们称它们为/ com /和/ net/。
我需要创建一个重定向,以确保仅将语言子文件夹加载到匹配的域中。
例如有效请求:
example.com/com /
example.net/net /
任何其他请求都需要基于子文件夹进行重定向:
example.com/net/-> example.net/net /
example.net/com/-> example.com/com /
我无法使用该框架,因为该文件夹包含所有静态文件,因此路由器从不加载。可以在Nginx配置中完成吗?
谢谢
更新,添加我的配置的简化版本:
server {
listen 80 default_server;
server_name _;
root /my/app/root;
index index.php index.html;
location / {
try_files $uri /index.php;
}
#PHP
location ~ \.php$ {
try_files $uri = 404;
[fastcgi stuff]
}
location = /favicon.ico {
access_log off;
log_not_found off;
}
location = /apple-touch-icon.png {
access_log off; log_not_found off;
}
location = /apple-touch-icon-precomposed.png {
access_log off;
log_not_found off;
}
}
答案 0 :(得分:0)
我认为每个子文件夹需要1个位置块(但尚未测试):
location /com {
proxy_pass http://upstream:8888/com;
proxy_set_header Host example.com;
proxy_pass_request_headers on;
}
location /net {
proxy_pass http://upstream:8888/net;
proxy_set_header Host example.net;
proxy_pass_request_headers on;
}
答案 1 :(得分:0)
解决了...
location /com/ {
if ($host = 'www.example.net') {
return 301 https://www.example.com$request_uri;
}
index index.html;
}
相反的是其他位置/域