如何在重写中匹配www和非www?

我有一个重写地图,其中包含要重定向的域列表。目前我必须在重写地图中列出www.foo.com和foo.com。我想知道是否有办法在同一行中对www和非www进行重写检查。
# Rewrite Map
foo.com file.php
www.foo.com file.php

# modrewrite
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ www.domain.com/%1 [L,R=301]
我尝试过像(www。)%{HTTP_HOST}或^(www。)%{HTTP_HOST}之类的东西,但没有运气。     
已邀请:
这应该这样做:
RewriteCond %{HTTP_HOST} ^(www.)?(.+)
RewriteCond ${domainmappings:%2} ^(.+)$ [NC]
RewriteRule ^ /%1 [L,R=301]
第一个
RewriteCond
将删除可选的
www.
前缀。然后将余数用作第二个
RewriteCond
中重写映射的参数。 如果未找到匹配项,则纯文本文件重写映射将返回空字符串:   如果找到密钥,则map-function构造将由SubstValue替换。如果未找到密钥,则如果未指定DefaultValue,则将其替换为DefaultValue或空字符串。 因此,如果满足第二个条件(注意
^(.+)$
),则找到匹配并且
%1
将包含SubstValue(在这种情况下为
file.php
)。     
来自这里的帖子 http://www.eukhost.com/forums/f15/simple-rewriterule-set-redirect-domain-6570/
RewriteEngine on
RewriteCond %{HTTP_HOST} ^xyz.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.xyz.com$
RewriteRule ^(.*)$ http://www.xyz.com/test//$1 [R=301,L]
    
您可以尝试制作www。部分可选以下内容:
# Rewrite Map
www.foo.com file.php

# modrewrite

# redirect to www domain always
RewriteCond %{HTTP_HOST} ^([^.]+.[^.]+)$
RewriteRule (.*) http://www.%1/$1 [L,R=301,QSA)

# redirect following the map
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ www.domain.com/%1 [L,R=301]
这将首先将
anything.anything
重定向到
www.anything.anything
,然后在下一个请求中应用您的规则。虽然没有保证,但对重写地图不太了解。     
RewriteCond %{HTTPS} off

RewriteCond %{HTTP_HOST} ^domain.com$ [OR]

RewriteCond %{HTTP_HOST} ^www.domain.com$

RewriteRule ^ https://www.domain.com%{REQUEST_URI} [R=301,L]
    

要回复问题请先登录注册