レンタルサーバーでサブドメインhttp://sub.example.jpを設定しました。
サブドメインの公開フォルダをトップルートに指定したのでサブドメインにアクセスするとhttp://example.jpと同じページが表示されます。
サブドメインにアクセスされた時に、アドレスはそのままの状態でサブドメインをパラメータの値に入れたページを表示させたいです。
イメージとしては以下の通りです。
左のサブドメイン型のURLにアクセスすると、アドレスがそのまま変わらず右のページを表示されるということです。
http://sub.example.jp → http://example.jp/data?mode=sub
http://apple.example.jp → http://example.jp/data?mode=apple
http://flower.example.jp → http://example.jp/data?mode=flower
.htaccessでリライトさせるために以下の.haccessファイルをトップルートに設置したのですが、Internal Server Errorになってしまいます。
RewriteCond %{HTTP_HOST} ^(.*)\.example\.jp$ RewriteRule ^(.*)$ /data?mode=$1 [L]
そこで、一旦サブドメインをsubのみと仮定して.htaccessを
RewriteCond %{HTTP_HOST} ^sub\.example\.jp$ RewriteRule ^$ /data?mode=sub [L] ```としてhttp://sub.example.jpにアクセスするとアドレスはそのまま(http://sub.example.jpのまま)で http://example.jp/data?mode=subのページを表示させることができたのですが、 サブドメイン部分が変わる場合の.htaccessの記述がわかりません。 どのように記述すればよいのでしょうか? よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
shi_ue さんの回答にもありますが、RewriteCond
のパターンマッチを参照するのは %1
〜%9
です。
(Apache httpd-2.4 の場合) RewriteEngine On RewriteCond %{HTTP_HOST} ^(.*)\.example\.jp$ RewriteRule ^(.*)$ /data?mode=%1 [END]
ループさせないよう、[END]
フラグを使っています。
Apache httpd-2.4 の場合、[L]
フラグでもループを判定して 2回目で終了してくれるようです。
→(2017/06/02) 訂正:ループするようです。
Apache httpd-2.2 の .htaccess の場合、[END]
フラグが使えません。
[L]
フラグでも、書き換え後のパスに対して再度先頭のルールから処理され、ループしてしまいます。
URL を変えないとなると、リダイレクトは使えないので、プロキシを使うしかないかもしれません。
(Apache httpd-2.2 の場合) RewriteEngine On RewriteCond %{HTTP_HOST} ^(.*)\.example\.jp$ RewriteRule ^(.*)$ http://example.jp/data?mode=%1 [L,P]
ところで、http://sub.example.jp/ のトップページは良いとして、その下のパスの扱いはどうしたいのでしょうか?
(2017/06/02 01:05) 追記
「http://sub.example.jp/123 → http://example.jp/data?mode=sub&id=123」とのこと、RewriteRule に以下のように「&id=$1」を追加すればいいと思います。
RewriteRule ^(.*)$ /data?mode=%1&id=$1 [END]
投稿2017/06/01 13:23
編集2017/06/02 04:40総合スコア12146
0
ベストアンサー
RewriteCond %{HTTP_HOST} ^(.*)\.example\.jp$ RewriteRule ^$ http://example.jp/data?mode=%1 [L] ```でどうでしょう? 追記 --- Bash on Ubuntu on Windows上で検証してみました。Apacheは`2.4.18`です。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.).example.jp$
RewriteRule ^(.)$ http://example.jp/?mode=%1&id=$1 [L]
以上のように設定すると、 |元アドレス|Rwrite結果| |:--|:--| |http://apple.example.jp|http://example.jp/mode=apple&id=| |http://apple.example.jp/123|http://example.jp/mode=apple&id=123| |http://example.jp|Rewriteされず| のようにRewriteされました。 もしこのように動作しない場合、他の設定箇所を確認してみてください。 Rewrite系の設定がどこかにあるかもしれません。 追記2 --- なんか言っている意味が理解できてきました。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} ^(.).example.jp$
RewriteRule ^(.)$ data?mode=%1&id=$1
ちなみに、`http://apple.example.jp/?u=123`など`QUERY_STRING`が入ってしまうとリライトしません。 もうひと工夫必要かもしれませんが・・・ 結果は以下のようになります。 |元アドレス|Rwrite結果(index.phpに渡されるパラメーター)| |:--|:--| |http://apple.example.jp|mode=apple&id=| |http://apple.example.jp/123|mode=apple&id=123| |http://apple.example.jp?t=123|Rewriteされず(t=123)| |http://example.jp|Rewriteされず| URLは`http://example.jp`に書き換わりませんが、ちゃんと`data`が呼ばれてパラメーターが引き渡されているので、これでいいんじゃないでしょうか?違う?
投稿2017/06/01 09:49
編集2017/06/02 06:01総合スコア4437
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/01 13:25
2017/06/01 15:16
2017/06/02 04:26 編集
2017/06/02 04:33
2017/06/02 05:15
2017/06/02 05:17
2017/06/02 05:26 編集
2017/06/02 05:33
2017/06/02 05:40
2017/06/02 05:52
2017/06/02 06:03
2017/06/05 02:02
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/01 15:42
2017/06/02 00:48
2017/06/02 03:29
2017/06/02 04:28
2017/06/02 04:32
2017/06/05 02:02