我有以下结构作为 ZF1 应用程序的一部分 -
C:/www/multisite
C:/www/multisite/application
C:/www/multisite/public
C:/www/multisite/client1/uploads
C:/www/multisite/client2/uploads
Run Code Online (Sandbox Code Playgroud)
我目前为每个子域都有以下虚拟主机 -
<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>
Run Code Online (Sandbox Code Playgroud)
我想根据子域动态实现这一点,但我不知道如何做到这一点。
{sub_domain}.multisite.dev
Run Code Online (Sandbox Code Playgroud)
将导致别名
Alias /uploads C:/www/multisite/{sub_domain}/uploads
Run Code Online (Sandbox Code Playgroud)
这可能吗?
[编辑] 因为我已经测试了解决方案。它现在像梦一样工作,如下详述。我在正则表达式中犯了一个愚蠢的错误,现在已更正。
这个想法是使用 RewriteCond 来捕获请求中的 fqdn 并将其拆分。正则表达式捕获域名的最左边部分,然后使用 %1 在 RewriteRule 中反向引用。我还从翻译中转义了“public”目录,这使得它可以使用映射到站点的所有 fqdn:s 通用的 URI 路径进行访问(具体示例请参见测试结果)。
.
RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond %{REQUEST_URI} !^/public/
RewriteCond ${lowercase:%{HTTP_HOST}} ^([^.]+)\.multisite\.dev$
RewriteRule ^/(.*) /myApache/runtime/docs/www/multisite/%1/$1
Run Code Online (Sandbox Code Playgroud)
我已经创建了这个目录结构。
/myApache/runtime/docs/www/multisite/client1/uploads
/myApache/runtime/docs/www/multisite/client2/uploads
/myApache/runtime/docs/www/multisite/public
Run Code Online (Sandbox Code Playgroud)
每个目录都有一个名为 index.htm 的单独文件。index.htm 内容显示了放置它的目录路径。
冲浪到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!
Run Code Online (Sandbox Code Playgroud)
冲浪到http://client1.multisite.dev/uploads/index.htm给出了这个结果:
Hi!
Served from /myApache/runtime/docs/www/multisite/client1/uploads/index.htm
See you!
Run Code Online (Sandbox Code Playgroud)
冲浪到http://client2.multisite.dev/uploads/index.htm给出了这个结果:
Hi!
Served from /myApache/runtime/docs/www/multisite/client2/uploads/index.htm
See you!
Run Code Online (Sandbox Code Playgroud)
在 Web 浏览器中输入 URL 时,我还测试了混合情况。一切都被翻译成小写。
我注意到您在 Windows 上运行 Apache,其本机文件系统不区分大小写。因此,规范化大小写不是必需的,尽管我个人认为小写 URL:s 在我的浏览器中看起来更美观。但是,在区分大小写的规范化的文件系统上将是必需的,因此我将其包含在内以供完成。
最后,我还注意到在 80 以外的端口上运行 Apache(即必须在 url 中拼写出来)会破坏 RewriteRule 反向引用。然而,我并没有为此寻求解决方案。
我希望这等于或接近您所需要的。
| 归档时间: |
|
| 查看次数: |
6131 次 |
| 最近记录: |