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;
} 

?>

ご覧のとおり、サブドメインで - の後にテキストまたは数字を使用することを選択した場合に機能する必要があるため、数字の代わりに「another」などのテキストを使用する場合があります。

このコードは現在、次のエラーを表示しています。

警告: preg_replace() [function.preg-replace]: 不明な修飾子 '.' 4行目のここの場所で

警告: ヘッダー情報を変更できません - 22 行目の場所でヘッダーが既に送信されています (output started at thelocationhere:4)。

上記の 2 番目のエラーは、デフォルトのケースと関係があると思います。

これについて何か助けていただければ幸いです。コードのスニペットを探してテストするのに多くの時間を費やしましたが、自分で動作させることはできませんでした。

ありがとう、ピーター

4

1 に答える 1

1

小さな間違いがあります - preg_match の代わりに preg_replace を使用しました。また、正規表現に / を埋め込む必要があります。したがって、次のようになります。

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

ところで、*.domain.com にアクセスしようとするすべての人を domain.com/redirect.php. に到達させる方法については触れていませんが、htaccess と RewriteEngine を使用していると思います。RewriteRule に直接入力することもできます。

「Headers already sent」は、一部の出力がブラウザーに送信されたことを意味します。ファイルを BOM なしの UTF-8 として保存しましたか? または、リダイレクトの前にブラウザに何かを出力したことがありますか? また、ファイルの先頭にいくつかの空白が含まれている可能性があります....

于 2012-08-28T18:57:55.460 に答える