web-dev-qa-db-ja.com

すべてのサブドメインをサブフォルダーにリダイレクトする

すべてのサブドメインがサブフォルダーにリダイレクトされるようにルールを追加したいと思います。例えば:

app1.example.com -> example.com/app1
app2.example.com -> example.com/app2
something.example.com -> example.com/something

すべてのサブドメインの深さは1レベルのみになります。

質問

  • どのDNSプロバイダーがこれを許可していますか?
  • これらの代替案は実行可能ですか?
    • それらすべてを、適切なサブフォルダーにリダイレクトする静的IPを持つ特別なWebアプリにリダイレクトします。それらがどのサブドメインから来たのかをどうやって知ることができますか?
    • 必要なときにプログラムで各ルールを作成します。ルールを追加するためのAPIアクセス権を持つDNSプロバイダーはどれですか?ここではAmazonRoute53が答えかもしれないと思います。
5
alf

どのDNSプロバイダーがこれを許可していますか?

すべての有能なもの。 DNS固有の提供である必要はなく、ほとんどの優れたホストがこれにも役立ちます。 2つの段階があります:

  1. *.example.comのDNSエントリが追加されました
  2. ホストのWebサーバー(Apacheなど)は、*.example.comVirtualHostにルーティングすることでexample.comに応答するように設定されています。

次に、最後に、RewriteRuleを使用して各サブドメインをキャッチする.htaccessエントリを追加し、HTTP_Host変数を使用してフォルダにリダイレクトします。

テストされていませんが、次のようなものです。

RewriteEngine on
RewriteCond   %{HTTP_Host}                 ^[^.]+\.example\.com$
RewriteRule   ^(.+)                        %{HTTP_Host}$1          [C]
RewriteRule   ^([^.]+)\.example\.com(.*)   http://example.com/$1/$2

ユーザーがapp1.example.com/bobを要求するとします。

2行目

これにより、app1.example.com内のHTTP_Hostがキャッチされます。これはRewriteCondと一致します。

3行目

通常、ApacheはRewriteRuleに対してチェックされる/bobのみを渡します。サブドメインを使用するには、次のルールを強制的に一致させることでChainingを悪用します

${HTTP_Host}$1
|           ^ /bob
^ app1.example.com

4行目

最後のRewriteRuleapp1.example.com/bobと一致し、not/bobだけと一致します。その結果、このサブドメインとパスの両方に一致し、目的のリダイレクトを実行するための「完全な」正規表現を持つことができます。

この機能が必要ない場合は、ルールを簡略化できます。


これらの代替案は実行可能ですか?それらすべてを、適切なサブフォルダーにリダイレクトする静的IPを持つ特別なWebアプリにリダイレクトします。それらがどのサブドメインから来たのかをどうやって知ることができますか?

これを行う確実な方法はありません。あなたはできた HTTPリファラーを試してみましたが、すべてのブラウザから送信されたわけではありません常に一部のファイアウォールはヘッダーを削除します。

必要なときにプログラムで各ルールを作成します。ルールを追加するためのAPIアクセス権を持つDNSプロバイダーはどれですか?ここではAmazonRoute53が答えかもしれないと思います。

これは実際には上記のより複雑なソリューションになるので、お勧めしません。また、遅延が発生します。DNSキャッシュを更新する必要があり、特定の訪問者は、更新するまでサブドメインをすぐに使用できません。少なくとも上記の私の提案では、彼らはすぐに始めることができるでしょう。

8
Jay