Apache:(非)子域的简单重写
我有一个(至少对我来说)非常重要的任务,其中一个项目运行在Apache2 VHost上 假设我拥有“foobar.com”域,并在注册器配置面板上为所有子域名创建了一个“通配符通配符”,我希望实现以下目标: 每个到“api.foobar.com”的请求都应该通过。 每个到'*.foobar.com'的请求,其中*是api以外的所有内容,应重写为'foobar.com' 看来我无法写出正确的重写条件和规则。有人能帮忙吗 谢谢Apache:(非)子域的简单重写,apache,subdomain,rewrite,Apache,Subdomain,Rewrite,我有一个(至少对我来说)非常重要的任务,其中一个项目运行在Apache2 VHost上 假设我拥有“foobar.com”域,并在注册器配置面板上为所有子域名创建了一个“通配符通配符”,我希望实现以下目标: 每个到“api.foobar.com”的请求都应该通过。 每个到'*.foobar.com'的请求,其中*是api以外的所有内容,应重写为'foobar.com' 看来我无法写出正确的重写条件和规则。有人能帮忙吗 谢谢 费利克斯你可以这样做 RewiteEngine ON RewriteC
费利克斯你可以这样做
RewiteEngine ON
RewriteCond ${HTTP_HOST} !^api\.foobar\.com$
RewriteCond ${HTTP_HOST} !^foobar\.com$
RewriteRule ^/?(.*)$ "http\:\/\/foobar\.com\/$1" [R=301,L]
在这里,您将使用主机而不是api.foobar.com
或foobar.com
将任何url重定向到foobar.com
上述条目附加了URL,如果不需要,您可以跳过RewriteRule
指令中的$1
UpdtaeGeorgieF(OP)建议使用以下正则表达式,它也应该起作用:
RewriteCond ${HTTP_HOST} !^(api\.)?foobar\.com$ [OR]
RewriteRule ^/?(.*)$ "http\:\/\/foobar\.com\/$1" [R=301,L]
嘿danishgoel,谢谢但这不起作用。我必须将规则更改为:RewriteRule^/?(.*)$“http\:\/\foobar\.com\/$1”[R=301,L],但现在我有无限重定向,阻止页面加载。api.foobar.com也被重定向到foobar.com。请尝试添加[OR}flag,我已经更新了我的答案看看这两个问题仍然存在。api重定向,然后出现无限重定向。尝试使用curl排除浏览器作为错误原因。我认为这应该是一个条件,其中一个正则表达式表示:子域必须为空或api。类似于!^(api\)?foobar.com$奇怪的是,我在自己的htaccess文件中有类似的语法,它可以正常工作。我使用我的域和它的ip地址,并重定向其他所有内容。但是你的正则表达式也应该可以工作。我已经更新了我的答案。看看,也试试我更新的旧正则表达式。