• ベストアンサー

サブドメインとmod_rewrite

あるレンタルサーバーで独自ドメインでサイトを運営していますが、以下のようなサブドメインの扱いを実現できる方法を探しています。 使用している独自ドメイン example.com 構成 /home/user01/www/index.html /example/index.php レンタルサーバーのエイリアス設定で「example.com」または「www.example.com」で/example/index.phpを表示するよう設定。 やりたいこと ブラウザのアドレスバーへ入力 → 実際のURL(飛ばし先) http://user.example.com/http://example.com/index.php?p=user http://abcd.example.com/http://example.com/index.php?p=abcd サブドメインは事実上クエリーなので、userの場合はとかabcdの場合はといった、事前定義的なものができません。 レンタルサーバーのためバーチャルホストは使えません。htaccessとmod_rewriteは使用可能なため、なんとかこれらで実現できないかと考えています。 これに近いことができるという表記が http://www.kawaz.jp/pukiwiki/?mod_rewrite#w1eddb33 にありましたが、自分の環境で試したところ「サーバーが見つかりません」と表示されうまく動きませんでした。最後の改行とか、そのへんのところは大丈夫です。 詳しい方、教えていただけないでしょうか。よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.3

> ドメイン管理サービスではDNSの設定がほとんど変更できず、NSレコードしか登録できないような感じです。 NSレコードしか登録できない、ということは、裏返せば自分でDNSサーバをたててそれを登録できるということになります。 詳しい状況がわからないので断言はできませんが、ドメインのプライマリDNSサーバを別途用意できるのであれば、そこでワイルドカードのレコードを登録することができるのではないでしょうか?

optional
質問者

お礼

ありがとうございます。 その後色々と調べまして、Value-Domainの無料のネームサーバ機能を使ってワイルドカードのレコードを登録しました。 そのためどんなサブドメインであっても「サーバーが見つかりません」とブラウザに表示されることはなくなりました。 しかしここで新たな問題が生じ、使用しているレンタルサーバーはひとつのIPのマシンに何十もの契約者がいるため、ワイルドカードのサブドメインでこのIPに誘導することには成功したものの、そのIPだけでは自分が管理するディレクトリを表示できません。 DNSサーバ側では、このIPであることに加え、このディレクトリを表示せよ、という指定まではできないでしょうか?

その他の回答 (4)

回答No.5

お使いのはNameベースのバーチャルホストでしょうね。 そうだと仮定すると 結論から言えば 駄目元でレンタルサーバー業者にお願いして ServerAlias にワイルドカード 設定してもらえないか交渉してください。 httpd.conf をいじれれば以下の様にServerAlias指定でワイルドカード設定すれば出来ます <VirtualHost *:80> ServerAdmin hoge@example.com DocumentRoot /var/www/example/www ServerName example.com ServerAlias example.com *.example.com #####################   ↑のように *.ドメイン名 ならばどのサブドメインでもOK http://httpd.apache.org/docs/2.0/ja/vhosts/name-based.html#using ですが、まさかいじれないですよね?>httpd.conf たぶん今現在 ServerAlias example.com www.example.com と固定したホスト名が指定されていると思います その場合 設定されていない abcd.example.com や user.example.com でアクセスするとwebサーバーのデフォルトのホスト用設定が適用されます。 コマンドプロンプトで c:\hoge> nslookup example.com するとサーバーのIPアドレスが出てきますが 次に そのIPアドレスで c:\hoge> nslookup **.**.**.**<=上で出てきたIPアドレス これで example.com が出ればいいですが ここでも標準のホスト名が出てくるはずです 一応念のため ブラウザで http://上で調べたIPアドレス/ でアクセスしてみてください。 これも 補足にあるように「○○レンタルサーバーへようこそ!的な画面」に成るはずです。

optional
質問者

お礼

ありがとうございます。 お勧めいただいたように、レンタルサーバー業者にお願いしてServerAliasにワイルドカード設定してもらえないか頼んでみましたが、できないとの回答でした。 なので、残念ですが諦めます。色々と勉強になりました。バーチャルホストの設定を詳しく教えていただいてありがとうございます。後学とさせていただきます。

回答No.4

あわわ 質問をよく読んでいませんでした >「サーバーが見つかりません」 ですね nslookupやpingで user.example.com もabcd.example.com も通らないのですね? ならば #1さんの言われるとおり そもそもwebサーバーに到達していないので .htaccess だろうが httpd.confだろうが駄目ですが そのレンタルサーバー業者で独自ドメインの サブドメインは設定できないのですか? 例えば さくらインターネットだと 自社で取得したものは勿論 http://support.sakura.ad.jp/support/manual/rs/setdom_b.shtml <=サブドメインを使用するにチェック 他社で取得したドメインでもサブドメイン設定/追加できます http://support.sakura.ad.jp/support/manual/rs/setdom_c.shtml#dom05 私自身も他社で取得したドメインでネームサーバーを さくら のにしてサブドメインを2つ追加しています。

optional
質問者

お礼

ありがとうございます。 下の方の回答にも書いたのですが、webサーバーに到達すること自体は成功しました。 しかしレンタルサーバー側で、サブドメインを無視して特定のページに誘導したりする機能(catchALL)が無い様です。個別設定では誘導できますが、あらかじめ全て指定する必要があるため、当初の目的であるサブドメインのクエリ化ができません。 >そのレンタルサーバー業者で独自ドメインの サブドメインは設定できないのですか? 登録することはできますが、やりたいことはどんなサブドメインであってもそれをクエリとしてindex.phpに渡して欲しいということなので、あらかじめサブドメインを定義したり設定することができません。 そのためワイルドカードで取ってきてくれることが必須という状況です。 ネームサーバー調整→どんなサブドメインでもとりあえずレンタルサーバーのIPまでは来れるようになった しかしサーバーのIPだけでは自分の契約ディレクトリを表示できない→○○レンタルサーバーへようこそ!的な画面が出るだけ やはりレンタルサーバー側がワイルドカード対応していないという時点で、アウトでしょうか?

回答No.2

どのサブドメインでアクセスしても /example/index.php は見に行く状態なのですよね? TOPPAGEだけの事なら簡単にやるなら RewriteEngine on RewriteCond %{REQUEST_URI} !^/index.php RewriteRule ^$ /index.php?%{HTTP_HOST} [L] これで http://user.example.com/ にアクセスするとURLはそのままでindex.php?user.example.com とQueryが渡り http://abcd.example.com/ なら同じく index.php?abcd.example.com です。 >これに近いことができるという表記が そのサイトを見てみましたが httpd.confのグローバルセクションへの記述法です .htaccessや Directoryコンテナ内ではマッチしません http://oshiete1.goo.ne.jp/qa4110860.html と書いたところで思いましたが、どうせPHPで受けるのなら index.php内で $_SERVER["HTTP_HOST"] を取得して それに応じたページを表示すれば Rewriteも不要なのでは?

optional
質問者

お礼

ありがとうございます。 >どのサブドメインでアクセスしても /example/index.php は見に行く状態なのですよね? 残念ながら、これではいけません。下の方への回答で書きましたが、catch all的な機能が無いようです。 他のアイディアとして、カスタマイズ性があるらしいValue-Domainの無料ネームサーバを間に挟んで管理すればcatch allもできるような記述を発見しました。まだ試してないのですが。 これができれば$_SERVER["HTTP_HOST"]からそれに応じたページを表示することも可能ですよね。Rewriteにこだわってるわけではないので、それでできれば問題ないです。

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.1

これ、Apache (mod_rewrite)の設定だけでは実現できない操作なんですが、そのあたりは認識されていますでしょうか? DNSで、ワイルドカードを使用した名前解決を設定していないと、そもそもWebサーバにHTTPプロトコルが届きません。 > 「サーバーが見つかりません」と表示されうまく動きませんでした。 とあるのも、そのあたりに原因があるように思われます。 テスト環境があるのであれば、そのあたりを考慮した上で再度試してみてください。

optional
質問者

お礼

ありがとうございます。mod_rewriteだけでは実現できないんですね。 >DNSで、ワイルドカードを使用した名前解決を設定していないと このへんが非常に疎いんですが、状況から言うとレンタルサーバーでは独自ドメインを使用できますが、事前に設定したもののみで、サブドメインをcatch allで受け入れるような機能はありません。 ドメイン管理サービスではDNSの設定がほとんど変更できず、NSレコードしか登録できないような感じです。 これでは当初の質問を実現できないでしょうか。

関連するQ&A

専門家に質問してみよう