.htaccess:使用来自RewriteCond的域名

.htaccess:使用来自RewriteCond的域名,.htaccess,.htaccess,我一直在用谷歌搜索我遇到的问题,到目前为止我还没有找到任何有效的方法 我所拥有的是一个Drupal多站点安装,我正在尝试为移动设备设置重定向。首先,我有10个域,其中只有一个公共字符串,即www。我想检查查看站点的设备是否为移动设备。我正在使用AMF成功地完成此操作,并确保访问者不在移动版本上,该版本将为m.domain.tld。如果一切正常,那么我需要将用户重定向到移动子域 按域执行此操作可使用以下方法: RewriteCond %{ENV:AMF_DEVICE_IS_MOBILE} ^tru

我一直在用谷歌搜索我遇到的问题,到目前为止我还没有找到任何有效的方法

我所拥有的是一个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个块,也不希望每次创建新网站时都要创建另一个块

我已经读到,您可以在RewriteCond模式中使用它来从匹配模式中生成一个var。不幸的是,我认为我没有正确地创建我的模式,因为当我尝试下面的方法时,它会重定向到m。后跟请求uri是什么

为了简洁起见,我省略了AMF条件

RewriteCond %{HTTP_HOST} !^[m.]+([^.]\.[com|net|org])$
RewriteRule (.*) http://m.%1/$1 [R=301,L]
从我读到的内容来看,%1应该与重写条件中的模式匹配,但它与任何内容都不匹配。这让我觉得我的模式是错误的。我尝试将[^.].[com | net | org]更改为。*但遇到了相同的问题,它只是重定向到m

我假设我的模式是错误的,如果是,我应该使用什么?我想做的事可能吗

明确地说,我的域名的形式如下:

www.domain.com

www.anotherdomain.net

somedomain.org

www.maybeanotherdomain.com

在我的示例中,我有标志R=301,但在测试中,我忽略了这一点,每次测试时都必须清除浏览器中的大量数据,以确保我选择了新规则

提前感谢您的帮助

您不能反向引用不匹配项!,但是您可以将该条件与%{HTTP_HOST}变量分为两个匹配项:

RewriteCond %{HTTP_HOST} !^m\.
RewriteCond %{HTTP_HOST} ([^\.]+)\.(com|net|org)$ [NC]
RewriteRule (.*) http://m.%1.%2/$1 [R=301,L]

您可能需要定制[^\.]+\。位为满足您的需要,此表达式将仅与www.domain.com的域部分匹配。

Awesome!我从来没见过有人提到你不能这么做。万分感谢D@JasonGray如果有一种反向引用的方法,我不知道它是如何完成的,但简单地说就是这样!表达不起作用。