首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射文件中特定域的mod_rewrite

映射文件中特定域的mod_rewrite
EN

Stack Overflow用户
提问于 2010-12-30 14:01:31
回答 2查看 219关注 0票数 0

我有一堆域名,我想去一个域名,但该域的不同部分。

代码语言:javascript
复制
# 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的一部分。我试过了

代码语言:javascript
复制
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule (.*) http://%1/$1 [R=301,L]

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

EN

回答 2

Stack Overflow用户

发布于 2010-12-30 14:11:32

你在正确的轨道上。你需要做的是使用地图上的管道操作符,这样你就有了一个通用的。

代码语言:javascript
复制
RewriteCond ${domainmappings:%{HTTP_HOST}|NOTFOUND}    ^(.+)$
RewriteCond %1  !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]

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

票数 0
EN

Stack Overflow用户

发布于 2010-12-31 01:40:33

当我找出大小写匹配时,我已经很接近了,但是我找不到www前缀。如果我使用下面的第一个,它可以在没有www的情况下工作。如果我使用第二个,它可以与www一起工作。如果我两者都用--两者都不起作用。

代码语言:javascript
复制
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]

有什么想法吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4560370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档