2

訪問者がsubdomain.example.comそこに行くと、リダイレクトされanothersubdomain.example.comます。そして、彼らがそれに行くとcss.subdomain.example.com、彼らはリダイレクトされcss.anothersubdomain.example.comます。

次の正規表現を試しました(preg_matchを使用):

試行 1:

if(preg_match('#(([\w\.-]+)\.subdomain|subdomain)\.example\.com#', $_SERVER['SERVER_NAME'], $match)) {
    header('Location: http://'.$match[1].'anothersubdomain.example.com/');
}

次の場所に移動すると、次のsubdomain.example.com場所にリダイレクトされます。anothersubdomain.example.com

しかし、彼らが次の場所に移動すると、次のcss.subdomain.example.com場所にもリダイレクトされますsubdomain.example.com

試行 2:

if(preg_match('#([\w\.-]+)\.subdomain\.example\.com#', $_SERVER['SERVER_NAME'], $match)) {
    header('Location: http://'.$match[1].'.anothersubdomain.example.com/');
}

次の場所に移動すると、次のcss.subdomain.example.com場所にリダイレクトされます。css.anothersubdomain.example.com

しかし、彼らが次の場所に移動すると、次のsubdomain.example.com場所にリダイレクトされ.subdomain.example.comます。

誰かが答えを持っていますか?nginx や apache の書き換えは使いたくない。

前もって感謝します。

4

2 に答える 2

3

これは私のために働いた

$tests = array(
    'subdomain.example.com' => 'anothersubdomain.example.com',
    'css.subdomain.example.com' => 'css.anothersubdomain.example.com'
);

foreach( $tests as $test => $correct_answer) {
    $result = preg_replace( '#(\w+\.)?subdomain\.example\.com#', '$1anothersubdomain.example.com', $test);
    if( strcmp( $result, $correct_answer) === 0) echo "PASS\n";
}

私がしたことは、「最初の」サブドメインのキャプチャ グループをオプションにしました。したがって、次のように結果を印刷した場合:

foreach( $tests as $test => $correct_answer) {
        $result = preg_replace( '#(\w+\.)?subdomain\.example\.com#', '$1anothersubdomain.example.com', $test);
    echo 'Input:    ' . $test . "\n" . 
         'Expected: ' . $correct_answer . "\n" . 
         'Actual  : ' .$result . "\n\n";
}

出力として得られます:

Input:    subdomain.example.com
Expected: anothersubdomain.example.com
Actual  : anothersubdomain.example.com

Input:    css.subdomain.example.com
Expected: css.anothersubdomain.example.com
Actual  : css.anothersubdomain.example.com

次に、ニーズに適用します。

if( preg_match( '#(\w+\.)?subdomain\.example\.com#', $_SERVER['SERVER_NAME'], $matches)) {
    echo header( 'Location: http://'. (isset( $matches[1]) ? $matches[1] : '') .'anothersubdomain.example.com/');
}
于 2012-06-25T14:11:18.750 に答える
0
if(preg_match('#(\w*\.?)subdomain\.example\.com#', $_SERVER['SERVER_NAME'], $match)) {
    header('Location: http://'.$match[1].'anothersubdomain.example.com/');
}
于 2012-06-25T14:14:16.920 に答える