解决.htaccess通配符子域重写问题

我一直在这个问题上工作了三天,并发表在几个论坛上,没有任何线索。

问题:

当用户键入SUBDOMAIN.domain.com我希望它保持在URL窗口中的方式。

这些文件的真实位置是domain.com/apps/SUBDOMAIN

我知道这是可能的使用.domain.com DNS Alogging(我已经完成)和.htaccess规则。

这是我现在的.htaccess规则

RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC] RewriteRule !^([a-z0-9-]+)($|/) /apps/%2%{REQUEST_URI} [PT,L] 

好的,这几乎可以工作。

在subdomain.domain.com中input的内容是从domain.com/apps/subdomain中读取的

但有些事情是可怕的错误。

访问subdomain.domain.com/image.jpg(AKA domain.com/apps/subdomain)工作正常

访问subdomain.domain.com/anyfolder/image.jpg(AKA domain.com/apps/subdomain)会返回一个404

看着Cpanel错误日志显示这一点

 [Thu Nov 18 20:48:50 2010] [error] [client ***.**.***.***] File does not exist: /home/domain/public_html/images, referer: http://subdomain.domain.com/apps/subdomain/ 

所以它似乎是正确的重写在第一个目录的基础上,但低于那个被发回到public_html根

所有的帮助和build议将不胜感激

谢谢,

蒂姆

PS。 我不得不删除正确的超链接格式,因为我是一个新用户。

纠正我,如果我错了,但你有重写规则:

 RewriteRule !^([a-z0-9-]+)($|/) /apps/%2%{REQUEST_URI} [PT,L] 

说:仅当^([a-z0-9-]+)($|/)不匹配时才重写。 当你的URLpath是/anyfolder/image.jpg ,上面的内容将匹配( ^anyfolder/ ),这样重写规则就不会运行,所以你基本上会继续到subdomain.domain.com/anyfolder/image.jpg

以下的SO问题也有类似的要求:

在他的回答中,glavić给出了应该起作用的回应,也给出了这个链接:

试试看,应该可以。

你可以编辑httpd.conf? 使用dynamic虚拟主机似乎更为直接。 看看http://httpd.apache.org/docs/2.2/vhosts/mass.html和http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html