htaccess来模拟多站点

时间:2016-03-12 14:03:07

标签: apache .htaccess mod-rewrite

我的网络应用程序具有以下目录结构:

app_root/
    includes/
        config/
            db.php
            [other config files]
        [other include files]
    services/
        [various php files]
    templates/
        [html files]
    [js/, css/, images/ directories]
    index.php

假设我在/var/www/projects/abc/下有一个应用实例,这意味着app_root为abc/。可以使用http://host.com/projects/abc/访问此实例。现在,如果我将所有文件复制到/var/www/projects/xyz/并更改配置文件,我将使用http://host.com/projects/xyz/访问第二个实例。

但是,随着应用程序获得错误修复和功能实现,应该为所有实例更新已更改的文件。为了避免这种情况,我想在对等实例中只有配置文件;像这样:

app_root/
    includes/
        config/
            db.php
            [other config files]
    .htaccess

此方法将所有公共文件保留在abc实例中,并且每个对等方中只包含特定于实例的文件。

我尝试了以下规则,但对于我提出的请求获得404:

RewriteEngine on
RewriteRule ^/xyz/(.+)$ /abc/$1

我的apache配置中有AllowOverride All,而.htaccess规则被选中并以其他方式应用。我错过了什么?

更新

我意识到在访问对等实例时需要传递一个参数。所以目标是改写:

http://host.com/projects/xyz/services/foo.php

http://host.com/projects/abc/services/foo.php?instance=xyz

显然services/foo.php是一条任意路径。

1 个答案:

答案 0 :(得分:1)

xyz/.htaccess

中尝试此规则
RewriteEngine On

RewriteRule (.*) ../abc/$1?instance=xyz [QSA,L]