2016-08-24 132 views
1

我想製作當前site.com的某些區域子域名 - 類似city1.site.comcity2.site.com,但我不想將所有文件從原始域複製到子域。
是否可以在子域city1.site.com上顯示與site.com相同的信息,但只需設置一個變量,如$city = 123?通過city1.site.com上的這個變量,我可以顯示這個城市更具體的聯繫人和產品。區域子域名

我是新來的子域,所以請幫助,我的網站是在PHP & MySQL。謝謝!

回答

1

如果您的區域很少,則可以爲每個區域手動創建子域,並將這些域指向與主站點相同的文件夾。然後,在腳本中,您可以抓住主機並將其與區域匹配,並將所需的值分配給一個變量。

<?php 
if($_SERVER['HTTP_HOST'] === 'city1.site.com') { 
    $city = 123; 
} else if($_SERVER['HTTP_HOST'] === 'city2.site.com') { 
    $city = 223; 
} 

如果你有許多地區和需要一種充滿動感的比賽,你可以任意子域匹配你的主站點路徑和腳本中可以使用的方法來獲得的子域,在數據庫中進行搜索。示例:

<?php 
$subdomain = strstr($_SERVER["HTTP_HOST"], '.', true); 
$city = getRegion($subdomain); 
if(!$city) { 
// throw 404 error 
    header('HTTP/1.0 404 Not Found'); 
    exit; 
} 
// getRegion($subdomain) is a method that should search your database to match the subdomain to a region 

要將所有子域匹配到路徑,您需要在CPanel中使用通配符。參見教程:https://www.namecheap.com/support/knowledgebase/article.aspx/9191/29/how-to-create-a-wildcard-subdomain-in-cpanel

+0

謝謝你的教程,但是像nothing.site.com這樣的不需要的子域名呢?如何阻止他們展示,特別是不被Google掃描? – Ilya

+0

如果你有一個不存在的城市,則拋出一個404錯誤來告訴google該頁面不存在。 你需要製作sitemap.xml文件來告訴谷歌什麼索引。 –

+0

好吧,我想404會做到這一點!謝謝! – Ilya

1

你或許可以使用$_SERVER超全局變量在PHP(閱讀文檔:http://php.net/manual/en/reserved.variables.server.php尤其是$_SERVER['HTTP_HOST'])找出來,其子域是當前一個(如果有的話)

其餘部分可能是容易的,例如根據當前的子域名就像switch語句

switch($_SERVER['HTTP_HOST']) { 
    case 'city1.site.com': $abc=1; break; 
    case 'city2.site.com': $abc=2; break; 
    default: $abc=0; break; 
} 

更新:的想法是,使用相同的代碼,所有子域(你不想保持副本的任意量),並通過強制不同的行爲碼。也許你甚至可以設置一個「catchall」域名。

所以,如果你設置你的域site.com住在你的服務器的htdocs/site.com目錄,使用同一目錄所有其他領域也是如此。

要爲您的網站實現不同的輸出,那麼你檢查$abc變量或一些其他變種(甚至$_SERVER['HTTP_HOST'])做

if(strpos($_SERVER['HTTP_HOST'],'.site.com') !== FALSE) { 
    $subdomain = str_replace('.site.com','',$_SERVER['HTTP_HOST']); 
} 
else { 
    $subdomain = null; 
} 
// now 'city1' is in $subdomain 

已提取的子域後,您可以運行SQL查詢或就像這個值一樣(如果你的數據庫設置得當)。

+0

謝謝!我如何獲取city1.site.com上site.com的所有內容?使用.htaccess? – Ilya

+0

該代碼是假設你有完全相同的文件。 (這意味着,即使是一個副本,但字面上所有域的文檔根目錄) – Jakumi

+0

是啊!但是,我需要在htaccess中使用哪些規則,或者可能需要在我的子域中顯示來自site.com的文件的服務器配置文件? – Ilya

1

第一步是確保您的DNS記錄已準備就緒。如果它尚不存在,請爲以下內容添加A記錄。

編輯 - 如果你正在使用一個共享的主機,這可能無法正常工作END

設置的名稱部分爲「*」,然後珍惜到您當前使用的服務器IP地址的下一個。一旦這個規則到位,人們可以去{任何} .site。com並將全部發送到同一臺服務器。

在這一點上,我會做一些類似Jakumi的答案的東西,但保持它的簡單

/* Cut up the URL */ 
$hostDetails = explode('.', $_SERVER['HTTP_HOST']); 
/* Get the first part (city) of the URL */ 
$city = current($hostDetails); 
/* Default check */ 
if($city == 'site') { $city = 'YOUR_DEFAULT'; } 
+0

我喜歡這種方式!但是,如果他們鍵入不存在的城市或類似nothing.site.com的內容,該怎麼辦?如何過濾這些子域名以阻止Google掃描它? – Ilya

+0

對於你的第一個問題,你必須做一些檢查(DB記錄?),然後默認如果不合適或使用Jakumi的答案。對於第二部分,我認爲您不必擔心Google掃描不存在的子域名,除非它們被「擊中」。如果是這種情況,您可以使用網站管理員工具並定義子域名,這樣您就可以刪除它們 – Simon