【发布时间】:2019-01-28 11:00:45
【问题描述】:
我的 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;
}
}
【问题讨论】:
-
server_name _;通常用于阻止您机器上的任何其他主机名。它不应该用于生产。 -
这是一个正在慢慢被替换的旧服务器/应用程序,所以不要太担心......我有兴趣知道原因吗?如果有更合适的方法来处理获取 100 个域,这些域可以每周更改到同一个代码文件夹中,而无需不断更改 nginx 配置文件。
-
你可以试试ngx_http_perl_module。