1

通常バージョンとモバイルバージョンの両方を備えたWebサイト用にApacheを構成する際に問題が発生しました。アイデアは、モバイルブラウザを使用しているユーザーを自動的にモバイルバージョンにリダイレクトし、通常のデスクトップPCの誰かがモバイルバージョンに接続して通常のWebサイトにリダイレクトしようとした場合です。

現在、モバイルユーザーをモバイルWebサイトに正しくリダイレ​​クトしています。しかし、他の方法でデスクトップバージョンにリダイレクトすることはできないようです。また、モバイル版のWebサイトにアクセスすると、デフォルトの「動作します!」と表示されます。何らかの理由でモバイルインデックスページの代わりにページ。

これが私が使用したすべての構成です。うまくいけば、誰かがこれで私を助けることができます。前もって感謝します!通常のウェブサイト:

<VirtualHost *:80>
ServerAdmin webmaster@henal.local
ServerName henal.local
ServerAlias www.henal.local

DocumentRoot /var/www/henal.local
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<Directory /var/www/henal.local>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    DirectoryIndex index.html
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/deltionkrant/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel debug

CustomLog ${APACHE_LOG_DIR}/deltionkrant/access.log combined

     Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

 </VirtualHost>

.htaccess通常のウェブサイト:

RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-  mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
    RewriteRule ^$ http://m.henal.local/ [L,R=302]

モバイルウェブサイト:

<VirtualHost *:80>
ServerAdmin webmaster@henal.local
ServerName m.henal.local
ServerAlias henal.local

DocumentRoot /var/www/henal.local/mobile
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<Directory /var/www/henal.local/mobile>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    DirectoryIndex index.html
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

     Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

.htaccessモバイルウェブサイト:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "!(android|blackberry|googlebot- mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^$ http://www.henal.local/ [L,R=302]
4

2 に答える 2

1

わかりました-それで、あなたはここでコンテンツネゴシエーションを行おうとしていて、ユーザーエージェントを悔やんでいます。あなたが持っている書き換え可能なルールとは別に、あなたは次のことを考慮する必要があります:

  1. 正規表現の代わりにApacheMobileFilter使用する。より正確で、より幅広い機能を提供します
  2. ユーザーが希望する表現/エクスペリエンスを選択できるようにする必要があります。したがって、モバイルバージョンを提示する場合は、実際にはデスクトップバージョンが必要だった可能性があるため、代わりにデスクトップバージョンを選択させる必要があります。およびその逆。
  3. これには、デスクトップへのブックマークがある、誰かがデスクトップバージョンへのURLを共有しているなど、さまざまな理由が考えられます。コンテンツネゴシエーションの手法は非常に基本的であり、これらのユースケースは考慮されていません。

これを考慮して、上記の問題に固有のもの:

RewriteCondパターンから引用符を削除し、R = 302およびLフラグを追加して、他の書き換えディレクティブが実行されることを確認してください。すなわち:

RewriteCond %{HTTP_USER_AGENT} !(android|blackberry|googlebot- mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos) [NC,R=302,L]

次に、デスクトップブラウザでテストしていて、デスクトップホストにリダイレクトされているため、デフォルトのデスクトップが「機能する」と表示されている可能性があります。

于 2012-05-22T09:27:03.087 に答える
0

William Greenly の「DNS は外部で解決できないため、携帯電話を使用してテストすることはできません。

参考までに、 Pagekite ( http://pagekite.net/ ) を使用すると、localhost をネットに簡単に公開して、携帯電話から開発マシンでのテストを容易に行うことができます。

HTH誰かがそこにいます。

于 2013-11-11T15:24:38.403 に答える