質問

これについては以前にもいくつかのスレッドがあったことは知っていますが、提案されたもの(見つけたもの)をすべて試してみましたが、これまでのところ何もうまくいきませんでした...

それを念頭に置いて、私がやろうとしていることは次のとおりです。

まず、ユーザーがページを公開し、それぞれに選択したサブドメインを与えられるようにしたいと思います (例:user.mysite.com)。私が収集した情報によると、これを行うための最良の方法は、mod_rewrite と .htaccess を使用して user.mysite.com を mysite.com/user にマップすることです。これは正しいですか?

それが正しい場合、誰かがこれを行う方法について明確な指示を与えてもらえますか?

また、私は MAMP を使用してすべての開発をローカルで行っているので、同じように動作するようにローカル環境をセットアップする方法を誰かが教えていただければ (これはもっと難しいと読みました)、大変感謝します。正直に言うと、これまであらゆることを試してきて無駄でしたし、このようなことをするのは初めてなので、完全に迷っています。助けてくれて本当にありがとう!

アップデート: これらの回答の中には本当に役に立ったものもありますが、私が考えているシステムでは、ユーザーごとにサブドメインを手動で追加することはできません。私が本当に求めているのは、これを即座に実行して、wildcard.mysite.com を mysite.com/wildcard にリダイレクトする方法です。Tumblr の設定方法は、私がやりたいことの完璧な例です。再度、感謝します!

役に立ちましたか?

解決

DNS サブドメインのワイルドカードを設定する方法に関しては、DNS ホスティング プロバイダーの機能になります。これは、どのホスティング プロバイダーを利用しているかによって手順が異なるため、プロバイダーにとっては適切な質問となるでしょう。

DNS ホストでこれを設定したら、Web アプリからは実際に URL を書き換えるだけになります。これは、Web サーバー自体の何らかのモジュール (IIS を使用している場合は isapi rewrite など) を使用して実行できます (これは可能であれば、それが好ましいルートになります)。また、アプリケーション レベルで書き換えを処理することもできます (ASP.NET の場合はルーティングを使用するなど)。

URLを書き換えると、 http://myname.domain.com になるだろう http://domain.com/something.aspx?name=私の名前 か何か。そこからは、myname 値が通常どおりクエリ文字列に含まれているかのように処理するだけです。それは理にかなっていますか?あなたが何を求めているのか誤解していないことを願っています。

編集:

ユーザーごとにサブドメインを作成することを提案しているのではなく、ドメイン自体にワイルドカード サブドメインを作成することをお勧めします。 何でも.domain.com (基本的に *.domain.com) はサイトに移動します。いくつかのドメインを設定しています 私のドメイン. 。これを設定するための手順は次のとおりです。

はい、ワイルドカードを構成できますが、Aレコードとして設定した場合にのみ機能します。ワイルドカードはC名で動作しません。ワイルドカードを使用するには、Astericks Character '*'を使用します。たとえば、ワイルドカードを使用したレコードを作成した場合、 .domain.com、その場所に入力されるものはすべて ''があり、指定されたIPアドレスに解決します。したがって、「www」、「ftp」、「サイト」、またはドメイン名の前に何かを入力すると、常にIPアドレスに解決します

私は、*.domain.com を私のサイトに移動させる、まさにこの方法でセットアップしたものをいくつか持っています。次に、Web アプリのベース URL を読み取ると、現在アクセスされているのが ryan.domain.com であるか、使用されているのが bill.domain.com であることがわかります。次に、次のいずれかを実行できます。

  1. URL 書き換えを使用してサブドメインがクエリ文字列の一部になるようにするか、
  2. アクセスした URL からホスト値を読み取り、その値に基づいていくつかのロジックを実行するだけです。

それは理にかなっていますか?私はまさにこの方法でセットアップしたサイトをいくつか持っています。DNS ホストを使用してドメインのワイルドカードを作成し、URL からホストまたはベース ドメインを読み取るだけで、サブドメイン (実際にはユーザー名) に基づいて何を表示するかを決定します。

編集2:

DNS エントリがなければこれを行う方法はありません。「オンライン世界」は、name1.domain.com、name2.domain.com、...、nameN.domain.com がすべてサーバーの IP アドレスに送信されることを認識する必要があります。これを行う唯一の方法は、適切な DNS エントリを使用することです。DNS ホストを使用してドメインのワイルドカード DNS エントリを追加する必要があります。あとは、URL からサブドメインを読み取り、コード内で適切なアクションを実行するだけです。

他のヒント

*AMP を実行している場合の最善の方法は、Thomas の提案に従って、Apache で仮想ホストを実行することです。これは、説明したリダイレクトの有無にかかわらず実行できます。

仮想ホスト

おそらくあなたはやりたいと思うでしょう 名前ベースの仮想ホスト, セットアップが最も簡単で、必要な IP アドレスは 1 つだけであるため (ローカル MAMP マシンでのセットアップとテストも簡単です)。IP ベースの仮想ホストは他のいくつかの点で優れていますが、ドメインごとに IP アドレスが必要です。

これ ウィキペディアのページ 違いについて説明し、下部にある名前ベースの vhost の実行方法に関する優れた基本的なウォークスルーへのリンクを示します。

テスト用のローカル マシンでは、偽のテスト ドメイン名用に /etc/hosts に偽の DNS 名を設定する必要もあります。つまりApache が localhost でリッスンし、Apache 構成で vhost1.test.domain と vhost2.test.domain を設定している場合は、これらのドメインを /etc/hosts の 127.0.0.1 行の localhost の後に追加するだけです。

127.0.0.1 localhost vhost1.test.domain vhost2.test.domain

/etc/hosts の編集を完了し、名前ベースの仮想ホスト構成を Apache 構成ファイルに追加したら、これで完了です。Apache を再起動すると、テスト ドメインが機能するはずです。

mod_rewrite によるリダイレクト

mod_rewrite を使用してリダイレクトを実行する場合 (user.example.com が直接ホストされず、代わりに example.com/user にリダイレクトされるように)、サブドメインと一致してリダイレクトするように RewriteCond を実行する必要もあります。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]

これを .htaccess またはメインの Apache 設定に置くことができます。

リダイレクトするサブドメインごとに、最後の 2 つのようなルールのペアを追加する必要があります。または、1つのワイルドカードルールを使用して * .example.comをexample.com/ *にリダイレクトできるように、書き込み式のサブドメインをキャプチャできる場合がありますが、セキュリティの観点からは本当に悪臭がします。

vhost とリダイレクトをすべてまとめて

より明示的に、リッスンするホスト名ごとに仮想ホスト構成セクションを設定し、これらの各ホスト名の書き換えルールをその仮想ホスト構成内に置く方がよいでしょう。(できることなら、この種のものを .htaccess ではなく Apache 構成内に置くほうが常に安全で高速です。Apache は常にファイルシステムで .htaccess ファイルを探して再解析するため、.htaccess はパフォーマンスを低下させます。これらはユーザーによってめちゃくちゃにされる可能性があるため、安全性は低くなります。)

このようにすべてをまとめると、Apache 構成内の vhost 構成は次のようになります。

NameVirtualHost 127.0.0.1:80

# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /www/siteroot
  # etc.
</VirtualHost>

# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost1.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>

# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost2.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>

この質問への回答がかなり遅れていることは承知していますが、ローカル開発ソリューションに関しても同じ問題がありました。で 別の SO スレッド より良い解決策を見つけたので、将来同じ質問を持つ人のためにそれを共有したいと思いました。

サブドメインを 127.0.0.1 に解決する VMware 所有のワイルド カード ドメイン:

vcap.me resolves to 127.0.0.1
www.vcap.me resolves to 127.0.0.1

37 Signals は、特定の形式を使用して任意のサブドメインを任意の IP にマッピングするドメインを所有しています。

127.0.0.1.xip.io resolves to 127.0.0.1
www.127.0.0.1.xip.io resolves to 127.0.0.1
db.192.168.0.1.xip.io resolves to 192.168.0.1

見る xip.io 詳細については

私はUbuntu 16.04を使用しており、14.04以降はDave Evansが提供するソリューションを使用しています ここ そしてそれは私にとってはうまくいきます。

  1. インストール dnsmasq

    sudo apt-get install dnsmasq
    
  2. 新しいファイルを作成する localhost.conf/etc/dnsmasq.d dir に次の行を追加

    #file /etc/dnsmasq.d/localhost.conf
    address=/localhost/127.0.0.1
    
  3. 編集 /etc/dhcp/dhclient.conf 次の行を追加します

    prepend domain-name-servers 127.0.0.1;
    

    (おそらく、この行はすでに存在しており、コメントを解除するだけで済むはずです。)

  4. 最後はサービスの再起動です

    sudo systemctl restart dnsmasq
    sudo dhclient
    

最後に、それが機能しているかどうかを確認する必要があります。

dig whatever.localhost

注記:

Web サーバーで使用したい場合は、単に変更する必要があります。 127.0.0.0 実際の IP アドレスに。

私のサイトの 1 つでもまったく同じことを行う必要がありました。次の手順に従ってください

  1. サーバー上に cPanel がある場合は、サブドメインを作成します *, そうでない場合は、DNS に A レコードを設定する必要があります (BIND については、「 http://ma.tt/2003/10/wildcard-dns-and-sub-domains/)。あなたの開発上で。サーバーにそれぞれを追加してサブドメインを偽装する方がはるかに良いでしょう。 hosts ファイル。

  2. (cPanel を使用した場合は、これを行う必要はありません)。次のようなものを Apache vhosts ファイルに追加する必要があります。それは主に、実行しているサーバーの種類 (共有かどうか) によって異なります。次のコードは完全ではありません。指示を与えるだけです。注記: ServerAlias example.com *.example.com は重要。

    <VirtualHost 127.0.0.1:80>  
            DocumentRoot /var/www/  
            ServerName example.com  
            ServerAlias example.com *.example.com  
    </VirtualHost>
    
  3. 次に、PHP スクリプトを使用して「Host」ヘッダーをチェックし、サブドメインを見つけて、それに応じてコンテンツを提供できます。

まず、ユーザーがページを公開し、それぞれの選択肢のサブドメインを提供できるようにしたいと思います(例:user.mysite.com)。私が集めることができるものから、これを行う最良の方法は、user.mysite.comをmysite.com/userにmod_rewriteと.htaccessにマッピングすることです - それは正しいですか?

使った方が良いかもしれません 仮想ホスト. 。こうすることで、各ユーザーは他のユーザーからほぼ独立した Web サーバー構成を持つことができます。

構文は次のようになります。

<VirtualHost *:80>
    DocumentRoot /var/www/user
    ServerName user.mysite.com
    ...
</VirtualHost>

私が多くのウェブホストを見てきたところによると、彼らは Apache 上に仮想ホストをセットアップしています。

したがって、www.mysite.com が /var/www から提供されている場合は、ユーザーごとにフォルダーを作成できます。次に、仮想ホストをそのフォルダーにマップします。

これにより、mysite.com/user と user.mysite.com の両方が機能します。

テスト環境に関しては、Windows を使用している場合は、HOSTS ファイルを編集して、mysite.com をローカル PC (127.0.0.1) とテスト用に設定したサブドメインにマップすることをお勧めします。

Ubuntu 18.04用に私が見つけた解決策は次のようなものです これです ただし、NetworkManager の構成が関係します。

  1. ファイルを編集する /etc/NetworkManager/NetworkManager.conf, 、行を追加します dns=dnsmasq[main] セクション

    sudo editor /etc/NetworkManager/NetworkManager.conf
    

    次のようになります:

    [main]
    plugins=ifupdown,keyfile
    dns=dnsmasq
    ...
    
  2. NetworkManager の resolv.conf の使用を開始する

    sudo rm /etc/resolv.conf
    sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
    
  3. ワイルドカード構成を使用してファイルを作成します

    echo 'address=/.localhost/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/localhost-wildcard.conf
    
  4. NetworkManager 設定をリロードする

    sudo systemctl reload NetworkManager
    
  5. 試して

    dig localdomain.localhost
    

他のドメインを追加することもできます。これは、ローカル開発セットアップを使用する場合の一部のタイプの認証に非常に役立ちます。

echo 'address=/.local-dev.workdomain.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/workdomain-wildcard.conf

次に、これは機能します:

dig petproject.local-dev.workdomain.com

;; ANSWER SECTION:
petproject.local-dev.workdomain.com. 0 IN   A   127.0.0.1
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top