通配符子域的各个资源

时间:2015-07-03 15:26:33

标签: php linux apache

我有多个子域都使用通用虚拟服务器和入口点/var/www/index.php,此文件使用$_SERVER['HTTP_HOST']来确定适用的"站点"用于控制生成的HTML。

site1.example.com
site2.example.com
site3.example.com
...
siteN.example.com

<VirtualHost *:443>
    ServerName example.com
    ServerAlias *.example.com
    <Directory "/var/www">
    </Directory>
</VirtualHost>

现在,我希望每个子域网站都可以使用各自的公共图像资源。为此,我目前只为每个站点添加了可供所有站点使用的单个目录

/var/www/public/site1/image1.png
/var/www/public/site1/image2.png
/var/www/public/site1/image3.png

/var/www/public/site2/image4.png
/var/www/public/site2/image5.png

然后使用PHP根据$_SERVER['HTTP_HOST']编写适当的路径。

<img src="/public/site1/image1.png" alt="bla" >

鉴于这种情况,是否可以使用Apache(或者可能是PHP或Linux符号链接)不需要子域名?

<img src="/public/image1.png" alt="bla" >

1 个答案:

答案 0 :(得分:1)

必须使用.htacces实现。您需要实现以下内容:

if($domain is 'site1.host.com')
{
    rewrite '/public/image1.png' to '/public/site1/image1.png'
}

未经测试,可能需要添加其他图片扩展程序:

RewriteCond %{HTTP_HOST} ^(.+)\.host\.com [NC] 
RewriteRule ^/public/(.*\.png)$ /public/$1/$2 [NC,L] 

EDIT。以下似乎有效。

RewriteCond %{HTTP_HOST} ^(.+)\.host\.com [NC] 
RewriteRule ^public/([^//]+)$ public/%1/$1 [NC,L]