2012-06-11 110 views
2

我有這個NGINX重寫URL:轉換NGINX重寫規則PHP

if ($http_host !~ "([a-zA-Z0-9.-]+)\.example\.com(.+)") { 
    rewrite^http://example.com/browse.php?u=http://$1$2? permanent; 
} 

我要轉換的規則,PHP,因爲我的主機不會讓我在NGINX改變服務器名稱這樣:*。實例.COM

我已經試過這樣的事情:(此腳本位於index.php文件在我的領域,我已經變成DNS通配符上)

<?php 
function unparse_url($parsed_url) { 
    $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : ''; 
    $host  = isset($parsed_url['host']) ? $parsed_url['host'] : ''; 
    $port  = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''; 
    $path  = isset($parsed_url['path']) ? $parsed_url['path'] : ''; 
    $query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : ''; 
    $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : ''; 
} 
if(preg_match('/^([a-zA-Z0-9.-]+)\.example\.com\/(.+)$/', $_SERVER["SERVER_NAME"])){ 
    unparse_url(parse_url($_SERVER["SERVER_NAME"])); 
    header('Location: $schemeexample.com/browse.php?u=$scheme$host$port$path$query$fragment'); 
} 
else { 
?> 
<html> 
**HTML CONTENT HERE** 

由於你可以看到,它使用parse_url解析URL並將其從解析的URL轉換回字符串。

不幸的是,這個腳本不工作我會得到HTML頁面的內容。有人有答案嗎?

在此先感謝。

Function unparse_url comes from here

回答

1

像這樣的事情?

if(preg_match('#([\w\.-]+)\.example\.com(.+)#', $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'], $match)) { 
    header('Location: http://example.com/browse.php?u=http://'.$match[1].$match[2]); 
    die; 
} 
+0

它現在完美的工作!感謝您的幫助。 +1 –