2012-07-11 94 views
1

我一直在使用Google地狱,因为我遇到了问题,到目前为止我没有找到任何可行的方法。.htaccess:使用RewriteCond的域名

我所拥有的是一个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的标志,但是在测试中,我将其从浏览器中清除了很多数据,每次我测试mak我确定我正在接受新规。

在此先感谢您的帮助!

回答

0

不能反向引用一个比赛,但你可以对%的条件分成2场比赛{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”

+0

太棒了!我从来没有看到任何提及你以前不能这样做的事情。太感谢了! :D – 2012-07-11 18:16:55

+0

@JasonGray如果有反向引用的方法,我不知道它是如何完成的,但只是像'!(表达式)'这样的东西不起作用。 – 2012-07-11 18:22:27