1

我在为一个既有普通版本又有移动版本的网站配置 Apache 时遇到了一些麻烦。这个想法是使用移动浏览器自动将用户重定向到移动版本,如果普通台式电脑上的某人试图连接到移动版本,则将其重定向到普通网站。

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

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

<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. 使用Apache 移动过滤器而不是正则表达式。它更准确并提供更大范围的功能
  2. 您应该允许用户选择他们想要的表示/体验。因此,如果您向他们展示移动版本,那么您应该让他们选择桌面版本,因为这实际上可能是他们想要的;反之亦然。
  3. 这可能有很多原因,例如他们有桌面书签,有人分享了桌面版本的 url 等等。您的内容协商技术非常基础,没有考虑任何这些用例。

考虑到这一点,具体到您的上述问题:

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

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 回答