2

私はこのNGINX書き換えURLを持っています:

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

ホストがNGINXのserver_nameを次のように変更できないため、ルールをPHPに変換したい:*。example.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ページのコンテンツを取得します。誰かが答えを持っていますか?

前もって感謝します。

関数unparse_urlはここから来ます

4

1 に答える 1

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;
}
于 2012-06-11T19:00:44.653 に答える