嗨,大家好我設立mywebapplication給唯一網址,供用戶如uniquename.mysite.com,anotheuniqname.mysite.com等檢索子域作爲獲得可變
我希望能夠在一個PHP腳本抓住網址的子域部分。如果我可以將它作爲一個GET變量會很好 - 我認爲可以用htaccess來完成。有任何想法嗎?
嗨,大家好我設立mywebapplication給唯一網址,供用戶如uniquename.mysite.com,anotheuniqname.mysite.com等檢索子域作爲獲得可變
我希望能夠在一個PHP腳本抓住網址的子域部分。如果我可以將它作爲一個GET變量會很好 - 我認爲可以用htaccess來完成。有任何想法嗎?
阿里 - 你不是指$_SERVER
變量,因爲$_GET
會和查詢字符串有關嗎?
如果是這樣,那麼你可以嘗試:
$_SERVER['HTTP_HOST']
吉姆
[編輯] - 看到http://roshanbh.com.np/2008/05/useful-server-variables-php.html幾個例子,可以幫助
我想嘗試這個(之初您的PHP代碼):
$_GET['subdomain'] = substr($_SERVER['SERVER_NAME'], 0, strrpos($_SERVER['SERVER_NAME'], '.'));
說明:strrpos
找到最後一個oc ''的保證。在訪問的域中,substr
然後將字符串返回到此位置。我將返回值分配給$_GET
var,因此您可以像使用普通的URL參數那樣使用它。
對於示例子域:'foo.some-domain.com',您在上面提供的代碼將返回'foo.some-domain'。我認爲你期待'富'。 – 2011-07-03 11:21:02
當只使用頂級域名(即 - 'some-domain.com')時,此方法不太可靠。使用示例域上面的代碼:'some-domain.com',會導致'某個域'。 您可以合併以下兩行來評估子域是否存在: $ subdomain =''; ($ _SERVER ['SERVER_NAME'],'。')> 1){sub_main = substr($ _ SERVER ['SERVER_NAME'],0,strpos($ _ SERVER ['SERVER_NAME'],「) 。「)); }' – 2011-07-03 11:22:08
$subdomain = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));
爲了確保有一個有效的子域:
$urlExplode = explode('.', $_SERVER['HTTP_HOST']);
if (count($urlExplode) > 2 && $urlExplode[0] !== 'www') {
$subdomain = $urlExplode[0];
}
else {
// treat as www.mysite.com or mysite.com
}
在引導文件將這個:
$tmp = explode(".", $_SERVER["HTTP_HOST"], 2);
$_GET["subdomain"] = $tmp[0];
如果你真的想在你的.htaccess
文件中使用mod_rewrite
,你可以做這樣的事情(假設你的腳本在本例中爲index.php
):
RewriteEngine On
# Prevent people from going to to index.php directly and spoofing the
# subdomain value, since this may not be a desirable action
RewriteCond %{THE_REQUEST} ^[A-Z]+\sindex\.php.*(\?|&)subdomain=
RewriteRule ^.*$ http://%{HTTP_HOST}/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)$
RewriteRule ^.*$ index.php?subdomain=%1
如果你在'httpd.conf'文件中有這個文件,而不是.htaccess文件,那麼我不明白爲什麼PHP會更有效率。由於PHP被解釋,並且大多數web服務器都被編譯,我認爲'mod_rewrite'會更有效率。 – icktoofay 2010-07-13 07:51:16
我傾向於同意你的看法。假設他要在每個目錄的環境下完成它(基於他的措詞),並且考慮到他將以任何方式調用PHP腳本,但我不確定是否使用了mod_rewrite的表達式編譯和內部在這個階段被迫做出的重定向將比在腳本中處理變量更快。無論如何,我想這種差異不是很重要。 – 2010-07-13 08:33:04
您的代碼包含錯誤:RewriteCond:無法編譯正則表達式'^ [A-Z] + \\ sindex \\。php。*(?|&)subdomain =' – JM4 2011-01-27 18:55:44
你想沿着線的東西:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[a-z0-9-]+\.yoursite\.com$
RewriteRule !^index\.php$ index.php [L]
,那麼你可以使用
<?php
preg_match('/^http:\/\/([a-z0-9-]+)\.yoursite.com$', $_SERVER['HTTP_HOST'], $matches);
$_GET['username'] = $matches[1];
?>
這個小功能將只是獲得獲得子域的「www.website.com
」或你的情況「 subdomain.website.com
「,然後將其分成3部分(0=>"www", 1=>"website", 2=>"com")
,然後返回值1
,即」www
「或您的子域名。
function isSubdomain()
{
$host = $_SERVER['HTTP_HOST'];
$host = explode('.',$host);
$host = (is_array($host)?$host[0]:$host);
return $host;
}
的exaple:如果你的網站是 「admin.website.com
」,您將收到 「admin
」。
實際上,我設置了我的Web應用程序,以便在用戶設置時從設置的URL中訪問。像mysite.wordpress.com一樣。 – Ali 2010-07-12 12:02:20
感謝anax - 忘記了4個空格重新編碼:) – 2010-07-12 12:29:17