1

私は自分が抱えている問題から地獄をグーグルで調べてきましたが、これまでのところ、うまくいくものは何も見つかりませんでした。

私が持っているのは、モバイル用のリダイレクトをセットアップしようとしているDrupalマルチサイトインストールです。まず、共通の文字列が1つしかない10個のドメインがあります。www。私が欲しいのは、サイトを表示しているデバイスがモバイルであるかどうかを確認し(AMFを使用してこれを正常に実行しています)、訪問者がモバイルバージョン(m.domain.tld)をまだ使用していないことを確認します。すべてが順調であれば、ユーザーをモバイルサブドメインにリダイレクトする必要があります。

ドメインごとにこれを行うには、以下を使用して機能します。

RewriteCond %{ENV:AMF_DEVICE_IS_MOBILE} ^true$
RewriteCond %{ENV:AMF_DEVICE_IS_TABLET} !^true$
RewriteCond %{HTTP_HOST} !^[m.]+mysite.com$
RewriteRule (.*) http://m.mysite.com/$1 [R=301,L]

ただし、これらのブロックを10個(ドメインごとに1個)持つ必要はありません。また、新しいWebサイトを作成するたびに別のブロックを作成する必要もありません。

RewriteCondパターンで()を使用して、一致するパターンからvarを作成できることを読みました。残念ながら、パターンを適切に作成しているとは思えません。次のことを試してみると、mにリダイレクトされるためです。リクエストURIが何であれ続きます。

簡潔にするために、AMF条件は省略しています。

RewriteCond %{HTTP_HOST} !^[m.]+([^.]\.[com|net|org])$
RewriteRule (.*) http://m.%1/$1 [R=301,L]

私が読んだものから、%1はRewriteCondからの私のパターンと一致するはずですが、何にも一致していません。それは私のパターンが間違っていると私に思わせます。([^。]。[com | net | org])を(。*)に変更しようとしましたが、mにリダイレクトされるだけの同じ問題が発生します。

私は自分のパターンが間違っていると思い込んでいますか?もしそうなら、私は何を使うべきですか?私がやろうとしていることは可能ですか?

明確にするために、私のドメインは次の形式になっています。

www.domain.com

www.anotherdomain.net

somedomain.org

www.maybeanotherdomain.com

私の例では、フラグR = 301がありますが、テストではそれを省略し、新しいルールを取得していることを確認するために、テストするたびにブラウザーから大量のデータをクリアする必要があります。

助けてくれてありがとう!

4

1 に答える 1

0

不一致(!)を逆参照することはできませんが、 %{HTTP_HOST}変数に対して条件を2つの一致に分けることができます。

RewriteCond %{HTTP_HOST} !^m\.
RewriteCond %{HTTP_HOST} ([^\.]+)\.(com|net|org)$ [NC]
RewriteRule (.*) http://m.%1.%2/$1 [R=301,L]

ニーズに合わせてビットを調整する必要がある場合があります。この式は、 「www.domain.com」の「ドメイン」部分に([^\.]+)\.のみ一致します。

于 2012-07-11T17:32:45.493 に答える