由于特殊原因,我在父网站中托管子网站,并希望为子网站使用域别名。为清楚起见,我们将两个域称为parent.org和child.org。
子网站位于:parent.org/child
由于child.org是域别名,因此它也位于:child.org/child
我想建立重定向,将任何请求路由到child.org或parent.org/child到child.org/child
搜索论坛时,我尝试了很多东西,虽然这个似乎与我的目标最接近:
RewriteCond %{HTTP_HOST} ^(www.)?child\.org$ [NC]
RewriteCond %{REQUEST_URI} !^/child/.*$ [NC]
RewriteRule ^(.*)$ http://child.org/child/$1 [R=302,L,NS]
RewriteCond %{HTTP_HOST} ^(www.)?parent\.org/child$ [NC]
RewriteRule ^(.*)$ http://child.org/child/$1 [R=302,L,NS]
这并不像希望的那样有效,导致child.org/child/child/child/etc。
我在这里缺少什么?
附录: 为了帮助澄清我的目标,对于任一域,如果“/ child”不是URL的第一部分,我想使用parent.org。如果“/ child”不是URL的第一部分,我想使用child.org。所以:
Parent setup:
parent.org/foo -> parent.org/foo
parent.org/child/foo -> child.org/child/foo
Child setup:
child.org -> child.org/child
child.org/foo -> parent.org/foo
child.org/child/foo -> child.org/child/foo
答案 0 :(得分:1)
首先RewriteCond %{HTTP_HOST} ^(www.)?parent\.org/child$ [NC]
是错误的,因为%{HTTP_HOST}
代表parent.org
或child.org
,而后跟uri
无法匹配。
我认为您对child.org
没有任何问题,因为它已经在domain alias
之前完成,这意味着child.org
的请求会显示child
中的所有内容目录除非你做另一个配置。
因此,您的代码应如下所示,仅在涉及父域时重定向:
RewriteCond %{HTTP_HOST} ^(www\.)?parent\.org$ [NC]
RewriteCond %{REQUEST_URI} ^/child/(.*)$ [NC]
RewriteRule ^child/(.*)$ http://child.org/$1 [R=302,L]
因此,此部分parent.org/child/
已配置为child.org
,因此任何包含parent.org/child/whatever
的请求都将为child.org/whatever
更新:您已经由于child.org是域名别名,因此它也位于:child.org/child ,如果是这样,代码应该是这样的:
RewriteCond %{HTTP_HOST} ^(www\.)?parent\.org$ [NC]
RewriteCond %{REQUEST_URI} ^/child/(.*)$ [NC]
RewriteRule ^(.*)$ http://child.org/$1 [R=302,L]
RewriteCond %{HTTP_HOST} ^(www\.)?child\.org$ [NC]
RewriteCond %{REQUEST_URI} !^/child/(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^/?$
RewriteRule ^(.*)$ http://parent.org/$1 [R=302,L]
RewriteCond %{HTTP_HOST} ^(www\.)?child\.org$ [NC]
RewriteCond %{REQUEST_URI} !^/child/(.*)$ [NC]
RewriteCond %{REQUEST_URI} ^/?$
RewriteRule ^(.*)$ http://child.org/child/$1 [R=302,L]
因此,对parent.org/child/whatever
的任何请求都将重定向到child.org/child/whatever
然后,对child.org/whatever
以及child
以外的所有内容的任何请求都将被重定向到parent.org/whatever
最后,对child.org
的任何请求都将重定向到child.org/child/