Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache:(非)子域的简单重写_Apache_Subdomain_Rewrite - Fatal编程技术网

Apache:(非)子域的简单重写

Apache:(非)子域的简单重写,apache,subdomain,rewrite,Apache,Subdomain,Rewrite,我有一个(至少对我来说)非常重要的任务,其中一个项目运行在Apache2 VHost上 假设我拥有“foobar.com”域,并在注册器配置面板上为所有子域名创建了一个“通配符通配符”,我希望实现以下目标: 每个到“api.foobar.com”的请求都应该通过。 每个到'*.foobar.com'的请求,其中*是api以外的所有内容,应重写为'foobar.com' 看来我无法写出正确的重写条件和规则。有人能帮忙吗 谢谢 费利克斯你可以这样做 RewiteEngine ON RewriteC

我有一个(至少对我来说)非常重要的任务,其中一个项目运行在Apache2 VHost上

假设我拥有“foobar.com”域,并在注册器配置面板上为所有子域名创建了一个“通配符通配符”,我希望实现以下目标:

每个到“api.foobar.com”的请求都应该通过。 每个到'*.foobar.com'的请求,其中*是api以外的所有内容,应重写为'foobar.com'

看来我无法写出正确的重写条件和规则。有人能帮忙吗

谢谢


费利克斯你可以这样做

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

Updtae
GeorgieF(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地址,并重定向其他所有内容。但是你的正则表达式也应该可以工作。我已经更新了我的答案。看看,也试试我更新的旧正则表达式。