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

Sco*_*ter 8 regex apache mod-rewrite rewritemap

我有一个重写地图,其中包含要重定向的域列表.目前我必须在重写地图中列出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]
Run Code Online (Sandbox Code Playgroud)

我尝试过像(www.)%{HTTP_HOST}或^(www.)%{HTTP_HOST}之类的东西,但没有运气.

Gum*_*mbo 16

这应该这样做:

RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
RewriteCond ${domainmappings:%2} ^(.+)$ [NC]
RewriteRule ^ /%1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

第一个RewriteCond将删除可选www.前缀.然后将余数用作第二个中重写映射的参数RewriteCond.

如果未找到匹配项,则纯文本文件重写映射将返回空字符串:

如果找到密钥,则map-function构造将由SubstValue替换.如果未找到密钥,则如果未指定DefaultValue,则将其替换为DefaultValue或空字符串.

因此,如果满足第二个条件(注意^(.+)$),则找到匹配并%1包含SubstValue(在本例中file.php).


Nik*_*696 5

来自这里的帖子

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]
Run Code Online (Sandbox Code Playgroud)