我认为我想做的事情比我原先想象的要复杂得多。第一部分是直截了当的:我正在使用.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文件的 >被重定向。这两个域都是同一服务器上的虚拟主机。
任何人都可以清除我正在尝试做的事情并提供解决方案吗?
谢谢, 戴夫
答案 0 :(得分:1)
我想出来了。问题是www.domain.tld上的目录/ abc中没有.htaccess来重定向移动浏览器。我想我期待Apache神奇地忽略/ abc目录存在的事实,并通过vhost根目录中的.htaccess处理所有请求。
因此,http://www.domain.tld/abc
的请求未被重定向。并且正在应用“移动格式化”,因为虽然地址栏显示“http:// www ...”,但该资源的请求来自“http:// m ...”,并且CSS文件存在在移动领域。