mod_rewriteについて質問です。


■環境
・さくらレンタルサーバ ビジネス
・マルチドメインを使用

■したいこと
・ユーザーエージェント毎にドキュメントルートを振り分けたい

■状況
下記の状況で、上手く動作しません。

○ドキュメントルート
マルチドメインを以下に割り当てている
/home/ユーザー名/www/dev/

配下に
/home/ユーザー名/www/dev/k/
/home/ユーザー名/www/dev/pc/
がある

○htaccess
/home/ユーザー名/www/dev/.htaccess

○htaccessの記述
RewriteEngine on
RewriteBase /dev

# ガラケー
RewriteCond %{HTTP_USER_AGENT} DoCoMo|KDDI|DDIPOKET|UP.Browser|J-PHONE|Vodafone|SoftBank [NC]
RewriteRule ^/(.*)$ /k/$1 [L]

# PC
RewriteRule ^/(.*)$ /pc/$1 [L]

ユーザーエージェント毎の振り分けは上手くいっています。
問題は「^/(.*)$」です。

http://www.hoge.jp/だとダメなのですが、
http://www.hoge.jp//だと振り分けられます。

「^/(.*)$」の「/」が余計なようです。
が、これを取ってしまうと、サーバーエラーになります。

さくらだとRewriteBaseを指定すれば良いとの記事を各所で見て試しましたが、
まった効果なしです。
そもそもRewriteBaseがあっても無くても同じ動作をしてしまいます。

お手数ですが、正しい記述をお教え頂けますでしょうか。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/03/08 01:30:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:niwa-mikiho No.1

回答回数516ベストアンサー獲得回数40

ポイント27pt

RewriteRule ^/?(.*)$ /pc/$1 [L]


これでどうでしょう?

id:sumithsonian

早速回答ありがとうございます。

^/?(.*)$だと^/(.*)$もしくは^(.*)$ということですね。

試してみましたが、^(.*)$として解釈され、エラーになってしまいました。

おそらくアクセスする度に条件が一致し、ループしてるようです。

2011/03/01 01:59:07
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント27pt

末尾がスラッシュで終わっていてもいなくても良いようにする一例

^/(.*)/*$
id:sumithsonian

早速回答ありがとうございます。

試したのですが、条件に当てはまらず、/dev/にアクセスしてしまいました。

2011/03/01 02:01:13
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント26pt
RewriteEngine on
RewriteBase /

# ガラケー
RewriteCond %{HTTP_USER_AGENT} DoCoMo|KDDI|DDIPOKET|UP.Browser|J-PHONE|Vodafone|SoftBank [NC]
RewriteRule ^/?(.*)$ /k/$1 [L]

# PC
RewriteRule ^/?(.*)$ /pc/$1 [L]

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません