0

我认为我想做的事情比我最初想象的要复杂。第一部分很简单:我正在使用 .htaccess 将移动浏览器重定向到不同域上网站的“移动”版本。这是“非移动”站点根目录中 .htaccess 的内容:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} android.+mobile|iphone [NC]
RewriteRule ^(.*)$ http://m.domain.tld%{REQUEST_URI} [R]

第二部分增加了一些复杂性。我在移动域上使用 .htaccess 将大多数请求重定向到根目录中的 index.php。以下是移动网站根目录中 .htaccess 的内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*) index.php

当发送到非移动站点的请求仅包含域名时,这一切都按预期工作:

http://www.domain.tld

被重定向到

http://m.domain.tld

没有问题。

此外,如果移动浏览器加载

http://m.domain.tld/abc

它按预期工作:移动域根目录中的 index.php 已加载,它解析请求 URL,并将值“abc”分配给变量。

但是,当我尝试导航到

http://www.domain.tld/abc

在移动浏览器中。这导致非移动文件,

http://www.domain.tld/abc/index.php

被加载到浏览器中,移动域中的 CSS 格式化。我想要执行的初始重定向未执行,但显然,后续请求(如 CSS 文件的请求)正在被重定向。两个域都是同一服务器上的虚拟主机。

任何人都可以通过我正在尝试做的事情并提供解决方案吗?

谢谢,戴夫

4

1 回答 1

1

我想通了。问题是 www.domain.tld 上的目录 /abc 中没有 .htaccess 来重定向移动浏览器。我想我期待 Apache 神奇地忽略 /abc 目录存在的事实,并通过 vhost 根目录中的 .htaccess 处理所有请求。

因此,请求http://www.domain.tld/abc没有被重定向。并且正在应用“移动格式”,因为虽然地址栏显示“http://www...”,但对该资源的请求来自“http://m...”,并且 CSS 文件存在在移动域上。

于 2012-04-06T03:14:21.543 回答