我的网站上有个人资料页面。显然,所有用户在此网址上都有自己的个人资料页面:domain.dev/profile?user=%username%。
现在,我希望每个用户都能看到username.domain.dev上的个人资料。
我看过很多关于How to let PHP to create subdomain automatically for each user?的帖子,但它并没有解决我的问题。
我的网站是ubuntu(nginx)以及Windows IIS 10。 我怎样才能做到这一点?你有其他一些我能看到的链接/问题吗?或者一些建议?
答案 0 :(得分:0)
在Nginx中,你只需要设置类似的东西:
server {
listen 80;
server_name *.domain.dev;
...
}
请注意:
server_name *.domain.dev;
在您的应用程序中,您需要拆分/处理HOST标题。
另一种方法,但这意味着redirect 301要做这样的事情:
server {
listen 80;
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
return 301 https://domain.dev/profile?user=$subdomain;
}
在这种情况下,请注意server_name中的regex:
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
这有助于您将子域用作$subdomain
。
为避免重定向,这可能有效:
server {
listen 80;
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
location / {
resolver 8.8.8.8;
proxy_pass http://httpbin.org/get?user=$subdomain;
proxy_set_header Host httpbin.org;
}
}
出于测试目的,我使用的是http://httpbin.org/ on the
proxy_pass`,因此您可以使用以下内容进行测试:
$ curl foo.your-domain.tld:8080
{
"args": {
"user": "foo"
},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "curl/7.54.0"
},
"origin": "91.65.17.142",
"url": "http://httpbin.org/get?user=foo"
}
注意回复:
"url": "http://httpbin.org/get?user=foo"
在这种情况下匹配子域名foo
。your-domain.tld。