0

我有一堆域,我想转到一个域,但该域的各个部分。

# this is what I currently have
RewriteEngine On
RewriteCond %{HTTP_HOST} ^.*\.?foo\.com$ [NC]
RewriteRule ^.*$ ${domainmappings:www.foo.com} [L,R=301]

# rewrite map file
www.foo.com www.domain.com/domain/foo.com.php
www.bar.com www.domain.com/domain/bar.com.php
www.baz.com www.domain.com/other/baz.php.foo

问题是我不想让每个域都成为 RewriteCond 的一部分。我试过了

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

但这将适用于每个域。我只希望映射文件中的域重定向,然后如果它与映射文件中的任何域都不匹配,则继续进行其他重写。

4

2 回答 2

0

你在正确的轨道上。您需要做的是在地图上使用管道运算符,这样您就可以一目了然。

RewriteCond ${domainmappings:%{HTTP_HOST}|NOTFOUND}    ^(.+)$
RewriteCond %1  !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]

如果主机不在列表中,则第二个条件将不匹配。您仍然需要处理 www 前缀和大小写匹配,但您明白了。

于 2010-12-30T06:11:31.563 回答
0

我很接近,因为我发现了大小写匹配,但无法找出 www 前缀。如果我使用下面的第一个,它可以在没有 www 的情况下工作。如果我使用第二个,它适用于 www。如果我同时使用两者 - 都不起作用。

RewriteCond %{HTTP_HOST} (.*)$ [NC] # works for without www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] # works with www
RewriteCond ${domainmappings:%1|NOTFOUND} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]

有任何想法吗?

于 2010-12-30T17:40:33.457 回答