2017-09-15 45 views
0

我有一個擁有個人資料頁面的網站。顯然,所有用戶都有一個自己的配置文件頁面可用於此網址: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

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

在這種情況下,注意到在伺服器的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" 

匹配subdomai在這種情況下,您需要輸入foo.your-domain.tld。

+0

是的,我做到了,但是當我轉到test.domain.dev時,它重定向到索引頁面。我的問題是創建一個規則來重寫用戶配置文件。相反:http://test.domain.dev不必顯示索引,但測試的用戶配置文件是在domain.dev/profile?user=test – Stackedo

+0

只需添加另一個示例將test.domain.dev發送到domain.dev/profile?user = test,希望它有幫助 – nbari

+0

有一種方法可以查看我在/ profile上看到的內容嗎?user = test in test.domain.dev? 沒有重定向我的意思是 – Stackedo