我有一堆域名,我想要访问一个域名但该域名的各个部分。
# 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]
但是这将为每个域做到这一点。我只希望映射文件中的域重定向,如果它与映射文件中的任何域不匹配,则继续执行其他重写。
答案 0 :(得分:0)
你走在正确的轨道上。您需要做的是在地图上使用管道操作符,以便您拥有一个全能的。
RewriteCond ${domainmappings:%{HTTP_HOST}|NOTFOUND} ^(.+)$
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]
如果主机不在列表中,则第二个条件将不匹配。你仍然需要处理www前缀和案例匹配,但你明白了。
答案 1 :(得分: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]
有什么想法吗?