2012-08-28 22 views
0

我一直在試圖找出近2個小時,現在不能得到它的工作,所以我希望你們中的一些人可以幫助我。請注意我對PHP和正則表達式很新穎。正則表達式解析子域和重定向

好吧,我正在嘗試設置一個重定向,它將根據子域中的文本重定向到某些頁面。我爲我的子域名設置了通配符,現在任何子域名URL都會重定向到包含以下代碼的此PHP文件。

所以,如果有人來anytexthere.domain.com他們到達domain.com/redirect.php

此PHP文件將被用於把它們發送到正確的相關的URL。

要做到這一點,我打算使用諸如anythinghere.1.domain.com之類的子域名,然後讓我的代碼檢查子域中出現的 - 以及之前和.domain之前的內容。如果它在這種情況下等於1轉到任何URL匹配它等等。

到目前爲止的代碼:

<?php 

$host = $_SERVER['SERVER_NAME']; 
preg_replace('(?<=-).*?(?=\.)', $host, $matches); 
$url = $matches; 

switch ($url) 
{ 
case "1": 
header("Location: http://www.website.com/page-here/"); 
break; 

case "test": 
header("Location: http://www.website.com/this-is-a-test/"); 
break; 

case "another": 
header("Location: http://www.website.com/another-page-here/"); 
break; 

default: 
header("Location: http://www.website.com"); 
break; 
} 

?> 

正如你可以看到我有存在的情況下使用文本如「另一個」而不是數字,因爲我需要它來工作,如果我選擇後,使用文字或數字 - 在子域中。

此代碼,因爲它現在是給我下面的錯誤:

警告:preg_replace函數()[function.preg替換]: '' 未知的修飾在thelocationhere第4行

警告:不能更改頭信息 - 頭已經發出(輸出開始thelocationhere:4)thelocationagain在線22

我相信上面的第二個錯誤與默認情況有關。

我真的很感激任何幫助。我花了很多時間搜索代碼片段並對它們進行測試,但是我沒有完成它自己的工作。

謝謝, 彼得

+0

第二個錯誤是因爲它已經發送了一些東西(第一個錯誤)。第一個錯誤是因爲你缺少[分隔符](http://us2.php.net/manual/en/regexp.reference.delimiters。PHP)在你的正則表達式(結果是,它假設你的'()'是分隔符,然後不知道如何處理'.')。 – Wiseguy

回答

1

你有一個小錯誤 - 您使用的preg_replace代替的preg_match的。另外,你需要用/填充你的正則表達式。所以它應該是:

preg_match('/(?<=-).*?(?=\.)/', $host, $matches); 

順便說一句,你沒有提到你是如何讓大家誰嘗試,並獲得* .domain.com達到domain.com/redirect.php,但我。假設你正在使用htaccess和RewriteEngine。你可以直接在RewriteRule中輸入。

「Headers already sent」表示某些輸出已發送到瀏覽器。您是否將文件保存爲沒有BOM的UTF-8?或者您可能在重定向之前將某些內容打印到了瀏覽器中? 在文件的開始處也可能有一些雜散空間....

+0

感謝您的快速回復。 * .domain.com到重定向代碼是在我的cPanel內完成的。我已經測試了上面給出的正則表達式,但現在它重定向到默認情況下的URL,而不是匹配正則表達式的情況。在這個測試網址examplesubdomain-another.domain.net中,它應該重定向到相應的另一個URL,但它不是。 –

+1

@PeterSullivan'$ matches'是否包含您期望的內容? (提示:否)'$ matches'是一個數組。你可能想'$ url = $ matches [0];'。 – Wiseguy

+0

完美的謝謝你們,現在工作。 –