为移动网站配置Apache的问题

时间:2012-05-22 07:01:29

标签: linux apache mobile web

我在为具有普通版和移动版的网站配置Apache时遇到了一些麻烦。我们的想法是将用户使用移动浏览器自动重定向到移动版本,如果普通桌面PC上的某个人试图连接到移动版本以将其重定向到普通网站。

现在,它正确地将移动用户重定向到移动网站。但它似乎无法将其他方式重定向到桌面版本。此外,当您转到该网站的移动版本时,它会显示默认的“它的工作原理!”页面而不是移动索引页面出于某种原因..

以下是我使用的所有配置。希望有人能够帮助我解决这个问题。提前致谢! 普通网站:

<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]

2 个答案:

答案 0 :(得分:1)

好的 - 所以你试图在这里进行内容协商,而你正在重新使用用户代理。除了你有的补偿规则,你需要考虑以下几点:

  1. 使用Apache Mobile Filter代替正则表达式。它更准确,并提供更多功能
  2. 您应该允许用户选择他们想要的表示/体验。因此,如果您向他们展示移动版本,那么您应该让他们选择桌面版本,因为这可能实际上是他们想要的;反之亦然。
  3. 这可能是出于多种原因,例如他们有桌面书签,有人共享桌面版等等。您的内容协商技术非常基本,并未考虑任何这些用例
  4. 考虑到这一点,具体针对上述问题:

    尝试从RewriteCond模式中删除引号并添加R = 302和L标志,以确保现在执行其他重写指令。即:

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

    其次,您可能会看到默认桌面“它正常工作”,因为您正在桌面浏览器上进行测试并被重定向到桌面主机。

答案 1 :(得分:0)

略微切线,回应威廉格林利的 “由于您的DNS无法从外部解析,因此您将无法使用手机进行测试。”

仅供参考Pagekite(http://pagekite.net/)可以轻松地将localhost暴露给网络,以便通过手机测试开发机器上的内容。

HTH有人在那里。