我一直在谷歌上搜索我遇到的问题,到目前为止我还没有发现任何有用的东西。
我拥有的是一个 Drupal 多站点安装,我正在尝试为移动设备设置重定向。首先,我有 10 个只有一个公共字符串 www 的域。我想要检查查看站点的设备是否是移动设备(我正在使用 AMF 成功执行此操作)并确保访问者尚未使用 m.domain.tld 的移动版本。如果一切都好,那么我需要将用户重定向到移动子域。
使用以下方法对每个域执行此操作:
RewriteCond %{ENV:AMF_DEVICE_IS_MOBILE} ^true$
RewriteCond %{ENV:AMF_DEVICE_IS_TABLET} !^true$
RewriteCond %{HTTP_HOST} !^[m.]+mysite.com$
RewriteRule (.*) http://m.mysite.com/$1 [R=301,L]
但是,我不想拥有 10 个这些块(每个域 1 个),也不想在每次创建新网站时都创建另一个块。
我读过你可以在 RewriteCond 模式中使用 () 来从匹配模式中创建一个 var 。不幸的是,我认为我没有正确地制作我的模式或其他东西,因为当我尝试以下操作时,它会重定向到 m。紧随其后的请求 uri 是什么。
为简洁起见,我省略了 AMF 条件。
RewriteCond %{HTTP_HOST} !^[m.]+([^.]\.[com|net|org])$
RewriteRule (.*) http://m.%1/$1 [R=301,L]
根据我阅读的内容, %1 应该与 RewriteCond 中的模式匹配,但它不匹配任何内容。这让我觉得我的模式是错误的。我尝试将 ([^.].[com|net|org]) 更改为 (.*) 但遇到相同的问题,它只是重定向到 m..
我是否正确假设我的模式是错误的,如果是这样,我应该使用什么?我想要做的甚至可能吗?
需要明确的是,我的域采用以下形式:
www.domain.com
www.anotherdomain.net
somedomain.org
www.maybeanotherdomain.com
在我的示例中,我有标志 R=301,但在测试中我将其排除在外,并且每次测试时都必须从浏览器中清除大量数据,以确保我采用了新规则。
提前感谢您的帮助!