下面是情况:我有一个共享主机上运行的几个不同的Web项目。 项目“A”通过子域( subA.mydomain.com )访问,而项目“B”是主要的mydomain.com
A和B都是主机的public_html文件夹中的符号链接:
ln -s /home/myhost/ProjectA ~/public_html/subA ln -s /home/myhost/ProjectB ~/public_html/main
子域( 项目A )正常工作,网站正在运行。 对于“B”这是主要的领域,我已经使用.htaccess指向主文件夹到这里写的子文件夹。 该域名网站也工作正常。
问题是当我做mydomain.com/subA ,子域名网站( 项目A )打开。 我尝试添加redirect规则指向mydomain.com/subA – > subA.mydomain.com像这样:
RewriteCond %{HTTP_HOST} ^mydomain.com$ [OR] RewriteCond %{HTTP_HOST} ^www.mydomain.com$ RewriteRule ^subA\/?$ "http\:\/\/subA\.mydomain\.com\/" [R=301,L]
但url仍然读取mydomain.com/subA和显示的网站是项目A(与图像和静态文件显然缺less作为一个不同的Web项目)。
为什么不redirect工作?
除非你有一个RewriteBase /
某处, ^subA\/?$
不会匹配任何东西。 Mod_rewrite查看整个url,包括前导/。 尝试:
RewriteRule ^/subA/?$ http://subA.mydomain.com/ [R=301,L]
另外,你可以放松逃跑。 它并没有受到伤害,但也没有任何帮助,而且更加难以阅读。
看起来下面的行工作(并删除较早的正则expression式redirect代码):
RedirectMatch 301 /subA/ http://subA.mydomain.com/
谢谢大家!
mydomain.com/subA的请求URI是/ subA(注意没有结尾斜杠),它们不匹配
改变你的重写规则
RewriteRule ^ subA http://subA.mydomain.com/ [R = 301,L]