我有以下结构作为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结果的具体例子)。
。
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.htm或http://client2.multisite.dev/public/index.htm即可得出以下结果:
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>