我有一台服务器、几个域名和两个网页。不知道如何执行以下操作:
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]