htaccess:根据域​​名进行多次重定向

htaccess:根据域​​名进行多次重定向

我有一台服务器、几个域名和两个网页。不知道如何执行以下操作:

A.com -> root\
www.A.com -> root\
B.com -> root\
www.B.com -> root\
C.com -> root\folder1\
www.C.com -> root\folder1\

顺便问一下。htaccess 中使用的逻辑运算符“and”是什么?我发现“or”是 [OR],但 [AND] 似乎不起作用。htaccess 是用什么语言编写的:)?

更新

不过,我在这个问题上犯了一个错误。这才是我真正想做的。DNS 设置为域 A.com 指向服务器的根文件夹。现在我想设置以下重定向:

除 C.com 和 D.com 之外的任何域都会重定向 (301) 到 www.A.com。A.com 无论如何都指向服务器的根文件夹,这是在 DNS 中设置的。

域名www.C.com指向服务器上的文件夹“folder1”。可以在htaccess中设置吗?

现在域名 C.com、www.D.com 和 D.com 重定向到 www.C.com。

答案1

对于您的 A 和 B 域,使用:

RewriteCond %{HTTP_HOST} ^(www\.)?(a|b).com$ [NC]
RewriteRule ^(.*)$ /root/ [L]

允许(www\.)?您使用带或不带 www 两种方式(?表示“前面的块零次或一次”)。

(a|b)表示“a 或 b”。您可以使用更多管道符 (a|b|d|e) 添加更多域

对于另一个:

RewriteCond %{HTTP_HOST} ^(www\.)?c.com$ [NC]
RewriteRule ^(.*)$ /root/folder1/ [L]

如果您希望 www.A.com/hello.php 重定向到 /root/hello.php,则$1在 RewriteRule 中的 /root/ 后添加(适用于两个规则)

[AND] 不存在,因为当您使用多个 RewriteConds 时它是隐式的。如下所示:

RewriteCond %{HTTP_HOST} ^www.a.com$ RewriteCond %{HTTP_HOST} ^www.b.com$

already 意味着已隐含 [AND],因此永远不会起作用(因为域名永远不可能同时是 a.com 和 b.com)。


更新 回答您的新问题:

“除 C.com 和 D.com 之外的任何域名都会重定向 (301) 到 www.A.com。A.com 无论如何都指向服务器的根文件夹,这是在 DNS 中设置的。”

RewriteCond %{HTTP_HOST} !^(www\.)?(c|d).com$ [NC]
RewriteRule ^(.*)$ http://www.a.com/$1 [L,R=301]

“域名www.C.com指向服务器上的文件夹‘folder1’。可以在htaccess中设置吗?”

RewriteCond %{HTTP_HOST} ^www.c.com$ [NC]
RewriteCond %{REQUEST_URI} !^/folder1/
RewriteRule ^(.*)$ /folder1/$1 [L,R]

“现在域名 C.com、www.D.com 和 D.com 重定向到 www.C.com。”

RewriteCond %{HTTP_HOST} ^c.com$ [OR]
RewriteCond %{HTTP_HOST} ^(www\.)?d.com$ [NC]
RewriteRule ^(.*)$ http://www.c.com/$1 [L,R=301]

相关内容