このトピックは、サイト上の動的サブドメインの実装に関する別のトピックです。
インターネット上には多くのサブドメインがあり、ハブにはいくつかのトピックもあります。
問題は、この質問はサブドメインからフォルダーへのリダイレクトの観点からのみカバーされており、サブドメインの全体的なダイナミズムはフォルダーを作成したということです-サブドメインはあなたのために働いています。
別の問題の解決が必要になる場合があります。たとえば、ユーザープロファイルとそれに関連付けられているすべての機能をサブドメインに取り込むなどです。
たとえば、
www.example.com /
users /
usernameという URLでプロファイルが機能する既製のサイトがあり、あらゆる種類の追加機能があります(たとえば、
www.example.com /
users /
username /
contactおよびその他の関連ページこのユーザー)。
そして、
username.example.com 、
username.example.com /
contactなど、
ユーザーに関連するすべてのものをサブドメインに転送したいと思い
ます 。
インターネットで見つかった解決策は、2つの理由で私を満足させませんでした。
- ドメインwww.example.comを維持しながら、それを機能させる方法を見つけることができませんでした
- 見つかったすべてのソリューションは、フォルダへのリダイレクトにのみ適しており、ルールがさらに機能する必要がある場合は機能しません
私たちのサイトはapacheの上にnginxを持っています(他の多くのものと同様)ので、私はこの束を使って自分で車輪を再発明しなければなりませんでした
一般的に、ソリューションは簡単です-なぜなら サイトはすでに
www.example.com/users([a-zA-Z _] +)の形式のmod_rewriteリンク機能によって確立されているため、nginxを介してサブドメインを書き換えることが決定されました。
追加の条件は、サイトがww.example.comとしてのみ機能し、example.comがwwwにリダイレクトすることです。
したがって、サブドメインを書き換えるためにnginx configにルールを記述するだけです。 ルールは
このソリューションであることが判明しました
-それは真実ではなく、それを使用することはお勧めしません :
location / { proxy_pass http://11.22.33.44:8080; proxy_redirect http://www.example.com:8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; # www set $uid ; # uid if ($host ~* ) { set $uid $2; } # uid www, www if ($uid !~ ) { rewrite ^(.*)$ /users/$uid$1 break; } }
updトピックの公開後、
BlackWizardはすべての初期条件に適合する最適なソリューションを提案しました。
server { server_name www.example.com; location / { proxy_pass 11.22.33.44:8080; } } server { server_name ~^(?<user>[a-z0-9\-]+)\.example.com$; location / { proxy_pass 11.22.33.44:8080/users/$user$uri$is_args$args; } }
したがって、訪問者がサブドメインに入った場合、nginxはこれを決定し、Apacheから
www.example.com/users/usernameの形式のアドレスを要求し、Apacheはmod_rewriteルールに従ってすべてをさらに解析します。
結果のソリューションには、次の利点があります。
- wwwで問題ない
- 既製のリンクシステムを備えたサイトに簡単に実装できます(サイト自体のリンクを変更するプロセスは考慮しません)
- mod_rewriteを使用するフォルダーとURLの両方で機能します
短所:
一般的に、このソリューションは私にはかなり良いようでした。私はグルの推薦と批判に耳を傾ける準備ができています。なぜなら、私自身はWebサーバーの設定の初心者であり、おそらく私のような初心者には解決策が役立つでしょう
Webサーバー構成ですべての可能なドメインを指定せずにusername.example.comを機能させる方法を
UPDします
サーバーが動的サブドメインを正しく処理するには、DNS設定に1つの小さなレコードを追加する必要があります。 これは、サーバーコントロールパネルを使用して実行できます。
次のA形式レコード(英語版では「Aレコード」)を追加するだけです。
* .example.com
エントリは、すべてのサブドメイン(メール、SMTPなど)の後に追加する必要があります