20

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

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

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

それが正しければ、誰かがこれを行う方法について明確な指示を与えることができますか?

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

更新: これらの回答のいくつかは非常に役に立ちましたが、私が考えているシステムでは、各ユーザーのサブドメインを手動で追加することはできません。私が本当に求めているのは、これをその場で行う方法と、wildcard.mysite.com を mysite.com/wildcard にリダイレクトする方法です。Tumblr の設定方法は、私がやりたいことの完璧な例です。再度、感謝します!

4

8 に答える 8

16

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

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

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

編集:

ユーザーごとにサブドメインを作成することを提案しているわけではありませんが、代わりにドメイン自体にワイルドカード サブドメインを作成して、.domain.com (基本的には *.domain.com) がサイトに送信されるようにします。mydomainでいくつかのドメインをセットアップしています。これを設定するための手順は次のとおりです。

はい、ワイルド カードを設定できますが、A レコードとして設定した場合にのみ機能します。ワイルドカードは C 名では機能しません。ワイルドカードを使用するには、アスタリスク文字「*」を使用します。たとえば、ワイルド カード.domain.com を使用してレコードを作成した場合、「 」のある場所に入力されたものはすべて、指定された IP アドレスに解決されます。したがって、ドメイン名の前に「www」、「ftp」、「site」などを入力すると、常に IP アドレスに解決されます。

*.domain.com が私のサイトにアクセスするように、このようにセットアップされたものがあります。次に、Web アプリでベース URL を読み取り、ryan.domain.com が現在アクセスされているか、bill.domain.com が使用されているかを確認できます。次に、次のいずれかを実行できます。

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

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

編集2:

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

于 2008-09-17T03:55:11.773 に答える
13

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

仮想ホスト

ほとんどの場合、設定が最も簡単で IP アドレスが 1 つしか必要ないため、名前ベースの仮想ホストを使用することをお勧めします (したがって、ローカル MAMP マシンでの設定とテストも簡単です)。IP ベースの仮想ホストは他のいくつかの点で優れていますが、ドメインごとに IP アドレスが必要です。

このウィキペディアのページでは、名前ベースの仮想ホストを実行する方法の違いと、基本的なチュートリアルへのリンクについて説明しています。

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

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 つのようなルールのペアを追加する必要があります。または、RewriteCond でサブドメインをキャプチャして、ワイルドカード ルールを 1 つ使用して *.example.com を example.com/ * にリダイレクトできるようにすることもできますが、セキュリティの観点からは、それは非常に悪いにおいがします。

すべて一緒に、仮想ホストとリダイレクト

リッスンするホスト名ごとに、より明示的に仮想ホスト構成セクションを設定し、これらの各ホスト名の書き換えルールを仮想ホスト構成内に配置することをお勧めします。(この種のものを .htaccess ではなく Apache 構成内に配置する方が、常により安全で高速です。.htaccess はパフォーマンスを低下させます。これは、Apache が常にファイルシステムで .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>
于 2008-09-17T04:54:05.687 に答える
7

この質問への回答がかなり遅れていることは承知していますが、ローカル開発ソリューションに関して同じ問題がありました。別の 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を参照してください。

于 2012-11-26T20:03:22.060 に答える
4

私はUbuntu 16.04を使用しており、14.04以降、ここでDave Evansが提供するソリューションを使用していますが、問題なく動作します。

  1. インストールdnsmasq

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

    #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 アドレスに変更する必要があります。

于 2016-12-03T09:15:11.367 に答える
1

私は自分のサイトの1つでまったく同じことをしなければなりませんでした。次の手順に従うことができます

  1. サーバーに cPanel がある場合は、サブドメインを作成します。*そうでない場合は、DNS に A レコードを設定する必要があります (BIND については、http://ma.tt/2003/10/wildcard-dns- を参照してください)。およびサブドメイン/ )。あなたの開発で。ファイルにそれぞれを追加して、サブドメインを偽造する方がはるかに優れてい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スクリプトを使用して「ホスト」ヘッダーを確認し、サブドメインを見つけて、それに応じてコンテンツを提供できるため.

于 2010-08-01T07:27:45.510 に答える
0

私が多くのウェブホストで見たものから、彼らは apache で仮想ホストをセットアップしています。

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

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

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

于 2008-09-17T04:09:33.593 に答える
0

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

仮想ホストを使用したほうがよい場合があります。そうすれば、各ユーザーは、他のユーザーからほとんど独立した Web サーバー構成を持つことができます。

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

<仮想ホスト *:80>
    DocumentRoot /var/www/user
    サーバー名 user.mysite.com
    ...
</仮想ホスト>
于 2008-09-17T03:54:31.633 に答える