基于子域的Apachedynamic别名

我有以下结构作为ZF1应用程序的一部分 –

C:/www/multisite C:/www/multisite/application C:/www/multisite/public C:/www/multisite/client1/uploads C:/www/multisite/client2/uploads 

我目前有每个子域的以下虚拟主机 –

 <VirtualHost *:80> DocumentRoot "C:/www/multisite/public" ServerName client1.multisite.dev Alias /uploads C:/www/multisite/client1/uploads FallbackResource /index.php </VirtualHost> <VirtualHost *:80> DocumentRoot "C:/www/multisite/public" ServerName client2.multisite.dev Alias /uploads C:/www/multisite/client2/uploads FallbackResource /index.php </VirtualHost> 

我想实现这个基于子域dynamic,但我不知道如何做到这一点。

 {sub_domain}.multisite.dev 

会导致一个别名

 Alias /uploads C:/www/multisite/{sub_domain}/uploads 

这可能吗?

[编辑]正如我已经testing的解决scheme。 现在它像梦一样工作,详情如下。 我正在修正的正则expression式中做了一个愚蠢的事情。

这个想法是使用RewriteCond来捕获请求中的fqdn并将其分解。 正则expression式捕获域名的最左边部分,然后使用%1在RewriteRule中反向引用。 我也从翻译中逃脱了“公共”目录,这使得它可以通过映射到站点的所有fqdn:s公用的URIpath访问(参见testing结果的具体例子)。

  • 为了实验的目的,我已经禁用了虚拟主机文件。
  • 我的DNS指向我的Apache 2.2testing服务器client1.multisite.devclient2.multisite.dev
  • 下面的代码片段在我的httpd.conf中。

 RewriteEngine On RewriteMap lowercase int:tolower RewriteCond %{REQUEST_URI} !^/public/ RewriteCond ${lowercase:%{HTTP_HOST}} ^([^.]+)\.multisite\.dev$ RewriteRule ^/(.*) /myApache/runtime/docs/www/multisite/%1/$1 

我已经创build了这个目录结构。

 /myApache/runtime/docs/www/multisite/client1/uploads /myApache/runtime/docs/www/multisite/client2/uploads /myApache/runtime/docs/www/multisite/public 

每个目录都有一个名为index.htm的单独文件。 index.htm内容显示了它所在的目录path。

浏览http://client1.multisite.dev/public/index.htmhttp://client2.multisite.dev/public/index.htm即&#x53EF;得出以下结果:

 Hi! Served from /myApache/runtime/docs/www/multisite/public/index.htm See you! 

冲浪到http://client1.multisite.dev/uploads/index.htm给出了这个结果:

 Hi! Served from /myApache/runtime/docs/www/multisite/client1/uploads/index.htm See you! 

冲浪到http://client2.multisite.dev/uploads/index.htm给出了这个结果:

 Hi! Served from /myApache/runtime/docs/www/multisite/client2/uploads/index.htm See you! 

我还在Web浏览器中inputURL时testing了混合情况。 一切都被翻译成小写。

我注意到,你在Windows上运行的是本地文件系统不区分大小写的Apache。 规范化的情况下,因此不是一个要求,虽然我个人发现小写url:更美观的看在我的浏览器。 在大小写敏感的归档文件系统上是一个需求,所以我把它包括在内以完成。

最后,我还注意到,在80以外的端口上运行Apache(即必须在URL中拼写)打破了RewriteRule反向引用。 但是我没有为此寻求解决scheme。

我希望这是相等或足够接近你所需要的。

尝试mod_vhost_alias: http ://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html示例:

 <VirtualHost *:80> ServerName apps.mydomain.ltd ServerAlias *.apps.mydomain.ltd VirtualDocumentRoot /web/mydomain.ltd/apps/%1/public_html CustomLog /web/mydomain.ltd/access_apache.log vhost_log_format ErrorLog /web/mydomain.ltd/logs/error_apache.log ServerAdmin [email protected] <Directory "/web/mydomain.ltd/apps"> Options FollowSymLinks Order allow,deny Allow from all AllowOverride All </Directory> </VirtualHost>