簡體   English   中英

虛擬主機還是干脆重寫?

[英]Virtual host or simply rewrite?

我的網站上有個人資料頁面。 顯然,所有用戶都可以在以下URL上找到自己的個人資料頁面:domain.dev/profile?user =%username%。

現在,我想讓每個用戶都可以在username.domain.dev上看到配置文件。

我看到了很多有關此的文章,例如如何讓PHP為每個用戶自動創建子域? 但這不能解決我的問題。

我在ubuntu(nginx)和Windows IIS 10上都有我的網站。我該怎么做? 您還有其他鏈接/問題可以看到嗎? 還是一些建議?

在Nginx中,您只需要設置以下內容:

server {
    listen       80;
    server_name  *.domain.dev;
    ...
}

注意:

server_name  *.domain.dev;

在您的應用程序中,您將需要拆分/處理HOST標頭。

但這是另一種方法,但這意味着重定向301要做這樣的事情:

server {
   listen      80;
   server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
   return 301 https://domain.dev/profile?user=$subdomain;
}

在這種情況下,請注意server_name中的正則表達式

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; 
  } 
}

出於測試目的,我on the proxy_pass` on the使用http://httpbin.org/ ,以便您可以使用以下內容進行測試:

$ 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM