0

サブドメインでモバイル サイトを構築しました。以下からのリダイレクト 302 の実装に成功しました。

www.domain.com to m.domain.com in htaccess.

私が今達成しようとしているのは、ユーザーを次からリダイレクトすることです。

www.domain.com/internal-page/ > 302 > m.domain.com/internal-page.html

デスクトップとモバイルの URL 名は同じではないことに注意してください。私が使用しているコードは次のようになります。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# Mobile Redirect
# Verify Desktop Version Parameter
RewriteCond %{QUERY_STRING} (^|&)ViewFullSite=true(&|$)

# Set cookie and expiration
RewriteRule ^ - [CO=mredir:0:www.domain.com:60]

# Prevent looping
RewriteCond %{HTTP_HOST} !^m.domain.com$

# Define Mobile agents
RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone|android"[NC]

# Verify if not already in Mobile site
RewriteCond %{HTTP_HOST} !^m\.

# We need to read and write at the same time to set cookie
RewriteCond %{QUERY_STRING} !(^|&)ViewFullSite=true(&|$) 

# Verify that we previously haven't set the cookie
RewriteCond %{HTTP_COOKIE} !^.*mredir=0.*$ [NC]

# Now redirect the users to the Mobile Homepage
RewriteRule ^$ http://m.domain.com [R]
RewriteRule $/internal-page/ http://m.domain.com/internal-page.html [R,L]
4

1 に答える 1

0

最後に、次のRewriteRuleように変更する必要があると思われる 2 行があります。

RewriteRule ^\/?$ http://m.domain.com [R=302]
RewriteRule ^\/?(.*)\/?$ http://m.domain.com/$1.html [R=302,L]

この^\/?(.*)\/?$手段は、先頭 ( ^ )から始まり最後 ( $ )までのすべての文字 ( (.*) ) を提供する文字列を提供します

http://m.domain.com/$1.html、アドレスが である場合、http://www.domain.com/internal-page/になることを意味しますhttp://m.domain.com/internal-page.html

これ[R=302,L]は 302 リダイレクト ( R=302 ) と最後の書き換え ( L ) を意味するはずなので、URL で他の書き換えが発生することはありません。

編集:

あなたのRewriteRulesの場合、URLが単なるドメインである場合、最初のリライトはリダイレクトしhttp://m.domain.comていたと思いますが、他に何かあった場合、実際には文字通りではなく/internal-page/、正規表現変数が必要だったため、2番目のリライトは失敗していました新しい URL に挿入します。

編集 (2):

特定のデスクトップ ページから各モバイル ページにリダイレクトするには:

RewriteRule ^\/foo\/?$ http://m.domain.com/bar.html [R=302]
RewriteRule ^\/hello\/?$ http://m.domain.com/world.html [R=302]

( /? ) は/がその位置でオプションであることを意味し、( ^ ) は開始を示し、( $ ) はこの場合の終了を示します ( ^は、ピリオド以外[^\.]を意味するようなものを示すためにも使用できます)。

リダイレクトを行うために必要な数を連続して配置するだけで、うまくいくはずです。誤解がないことを確認するために、最初の行は にhttp://www.domain.com/foo/なることを意味しhttp://m.domain.com/bar.html、末尾のスラッシュがオプションになっているためhttp://www.domain.com/foo(末尾のスラッシュがないことに注意してください)、 にもリダイレクトされhttp://m.domain.com/bar.htmlます。

構文を少しいじってカスタマイズすることもできますが、うまくいけば、正しい方向に向けることができます。他にご不明な点がございましたら、お気軽にお問い合わせください。できる限りお手伝いさせていただきます。

壊れたレコードなどのように聞こえたくはありませんが、携帯サイトを変更する方がはるかに優れた方法であると指摘せずに、良心的にこの編集を終了することはできないと感じています. それが不可能な場合、またはいくつかのページを変更するよりもいくつかの静的リダイレクトが大したことではないと感じている場合は、完全に理解していますが、考慮すべき点がいくつかあります。

モバイル サイトとデスクトップ サイトが別々のフォルダーにある場合、まったく同じ名前スキームを使用して、Rewrite を簡単にすることと、新しいページ/コンテンツが追加されたときにそれ以上の Rewrite ステートメントを必要としないことの両方を実現できます (より多くの rewrite ステートメントを作成するということは、新しいページを作成するには、リダイレクトを作成する必要があります。これは余分な作業であり、注意が必要なファイルが増えます。)

モバイル サイトが実際にデスクトップ サイトと同じディレクトリからホストされている場合、いずれかのファイルを変更して次の/desktop-foo/よう/d-foo/にし/m-foo.htmlます。デスクトップ ページを変更するのをやめて/foo//m-foo.htmlすべてのモバイル バージョンを「m」で始まるようにすることができます。

頭に浮かぶ 3 番目のオプションは、サイトのコンテンツにもよりますが、最も難しく、時間がかかりますが、非常に優れたオプションであり、最終的にサイトを最も簡単に作業できるようになります (もちろん、最初の作業の後)。 . mod_rewrite や別のページを使用せずに、デスクトップ、モバイル、タブレットなどで同じページを使用することは十分に可能です。CSS のメディア クエリのようなものを使用すると、クライアントが何からページを表示しているかに応じて、ページの外観を変更できます。以前、メディア クエリと画面の最大幅を使用してページの外観を決定するチュートリアルを見つけました。これにはかなりの作業が必要になりますが、今後の面倒を省くことができ、挑戦することができれば興味深い学習体験となるでしょう。

繰り返しますが、これが最後にトピックから逸​​れて申し訳ありませんが、あなたの最初の質問とあなたの回答から、まだそれらを検討して却下していない場合、代替案が興味深いと思うかもしれないという印象を受けました。あなたが一部の人のようになるつもりはないことに興味を持ち、「ねえ、$*%&あなた、相棒! 私は他のすべてのゴミではなく書き換えを求めました!」と応答します。意図したものにすぎないと思っていただければ幸いです... 役立つ.

于 2013-06-25T16:48:05.007 に答える