0

嘿伙计们,我在这里遇到了一个棘手的问题,但我相信它可以让我绕过对 PHP 控制器文件进行转发的需要。我有一个网址,example.com/如果它没有以下序列,我会点击它,它将像这样路由

#example.com
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^$ http://www\.example2\.com/?CampID=dm/DMdefault [R=301,L]

问题是第二个重定向。如果我想将前两个(字母数字)切片作为转发 url 的一部分,将接下来的五个切片作为第二部分,这可行吗?

RewriteMap  lc int:tolower
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^(\w{2})(\w{5})$ http://www\.example2\.com/landing/external-marketing/direct-mail/${lc:$1}?CampId=${lc:$1$2} [R=301,L]

这 * 应该规范化大小写,并转发http://example.com/BA025JD更正 http://www.example2.com/landing/external-marketing/direct-mail/ba?CampId=ba025jd

4

1 回答 1

1

您不能RewriteMap在 htaccess 文件中使用该指令,您需要在服务器或虚拟主机配置中定义映射。不幸的是,apache 选择不引起您的注意。如果您使用尚未定义的地图,它只会默默地什么都不做。

但是,一旦定义了该地图,您的规则就对我有用:

我的请求

GET /A1b2C3d HTTP/1.1
Host: example.com

apache 的响应,定义了lc映射

HTTP/1.1 301 Moved Permanently
Date: Mon, 15 Oct 2012 18:44:37 GMT
Server: Apache
Location: http://www.example2.com/landing/external-marketing/direct-mail/a1?CampId=a1b2c3d
Content-Length: 349
Content-Type: text/html; charset=iso-8859-1
于 2012-10-15T18:47:23.720 回答