使用.htaccess以root身份动态加载子域文件夹

时间:2017-05-05 15:15:23

标签: .htaccess mod-rewrite subdomain

我尝试使用# config.yml file: (or services.yml) app_zabbix_detect.detector: class: AppBundle\Services\ZabbixDetector # real test 来实现,因此我可以使用一个虚拟主机设置的配置和hosts文件中定义的一个URL来访问我的所有项目。这将允许我删除文件夹中的项目,它将在不让我做任何其他配置的情况下运行,并且在工作时节省了大量时间。

示例A:.htaccess托管在prestige.projects.dev

示例B:D:/projects/prestige上托管了newproject.projects.dev

下面的代码适用于示例A的具体情况,但我无法弄清楚如何使其动态地“动态”运行。对于所有项目。我的目标是让D:/projects/newproject成为通配符。例如:prestige自动加载newproject.projects.dev的内容。

D:/projects/newproject

只要达到目标,我就可以接受除此方法之外的其他建议。

1 个答案:

答案 0 :(得分:2)

请尝试以下内容:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([a-z]+)\.projects\.dev [NC]
RewriteCond "%{REQUEST_URI} /%1" !^(/[^/]+)[^\s]*\s\1$
RewriteRule (.*) /%1/$1 [L]

%1是对最后匹配的 CondPattern 中捕获的组的反向引用。

第二个RewriteCond指令是"通配符"硬编码检查的版本,以确保REQUEST_URI尚未从与子域匹配的目录开始 - 从而防止重写循环。

字符串%{REQUEST_URI} /%1(在第一次重写后扩展为表格&#34; /<directory>/<anything> /<subdomain>&#34;的字符串)与正则表达式^(/[^/]+)[^\s]*\s\1$匹配,后者检查查看/<directory>是否与/<subdomain相同(\1是正则表达式中捕获的组的内部反向引用)。只有在不匹配时才会发生RewriteRule 替换 - 与您当前规则的工作方式相同。