RewriteRule用于在一个应用程序中处理多个域?

时间:2013-03-31 13:04:10

标签: php .htaccess mod-rewrite url-rewriting virtualhost

说我在example.com.

应用

一个客户 migth在example.com/customer/hisname/中有内容。

好吧,我想让客户 为其内容指定 域名,hisname.com,这样(hisdomain.com)呈现example.com/customer/hisname/

为此我创建了两个虚拟主机,两者都在同一个地方有根目录,并且我编写了一个.htaccess文件以便过滤http_host,如果不是example.com,则以这样的方式重写将请求传递给example.com/customer/hisname /.

但是,当我没有在URI中获得/ customer / hisname / part时,这种方法不起作用。 如果我访问example.com/index.php中的hisname.com/list/,我需要同时拥有/ list /和(作为前缀)/ customer / hisname /,我只会得到,正如您所料just / list /.

那么,对此有什么正确的方法呢?

2 个答案:

答案 0 :(得分:2)

如果您可以创建Virtual Hosts,则应设置正确的文档根目录,而不是使用mod_rewrite

<VirtualHost w.x.y.z:80>
    ServerAdmin webmaster@hisname.com
    DocumentRoot /path/to/www/customer/hisname
    ServerName hisname.com
    ...
</VirtualHost>

如果无法做到这一点,您可以提取host部分并进行内部重写

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^(?www\.)?example\.com$
RewriteCond %{HTTP_HOST} ^(.+)\.com$
RewriteRule ^ /index.php?prefix=customer/%1&request=%{REQUEST_URI} [L,QSA]

答案 1 :(得分:1)

使用变量$ _SERVER ['HTTP_HOST']并根据请求的主机加载不同的视图。确保您处理所需的所有子主机并且还有一个默认页面