根据主机名重写 URL

根据主机名重写 URL

是否可以使用.htaccess 文件重写此内容:

http://customer1.com/app/assets/css

变成这样:

http://customer1.com/app/customers/customer1/assets/css

如果是那怎么办?

编辑:目标是避免在添加新客户时对 .htaccess 进行任何更新 EDIT2:

我发现我的问题太模糊了。我有一个 CMS,供许多不同的客户使用(www.foo.com、www.bar.com、www.somerandomname.com)。每个客户在目录 /data/www/cms/customers/XXXXXX/ 中都有其独特的文件(设计、上传),其中 XXXXXX 是客户的名称。Apache 配置文件在 /data/www/cms/ 上设置了默认的 DocumentRoot。

我想要做的是让 URLhttp://www.foo.com/app/assets/css/bg.png从给定的客户数据目录返回一个文件,即 /data/www/cms/app/customers/foo.com/assets/css/bg.png。

答案1

我不知道.htaccess文件,但我很确定这会起作用:

RewriteEngine On
RewriteCond %{HTTP_HOST} customer([0-9]+)\.com
RewriteRule ^/app/(.*) /app/customers/customer%1/$1 [QSA]

解释:

RewriteCond %{HTTP_HOST} customer([0-9]+)\.com

%1将把客户编号放入变量' '中,即' 1'

RewriteRule ^/app/(.*) /app/customers/customer%1/$1 [QSA]

意思是:如果路径开始用' /app/'然后将其重写为/app/customers/customer并添加变量' %1'(即1我们的示例中为' '),这样它应该可以满足您的要求:重写为http://customer1.com/app/customers/customer1/

很抱歉,但您的问题并不十分精确,您应该提供更多例子,或者更具体地说明您想要做什么,但我已尽力帮助您。

您也可以使用RewriteMap指令。想象一下,您将所有客户的网站和正确的目录放入其中,如下所示:

alsace                     1   
aquitaine                  2   
auvergne                   3   
basse-normandie            4   
bourgogne                  5   
bretagne                   6   
centre                     7   
champagne-ardenne          8   
corse                      9   
franche-comte              10  
haute-normandie            11  

然后我使用这样的 RewriteRule:

RewriteMap mapregions dbm:/web/htdocs/maps/regions.map
RewriteRule ^/region/(.*)/$ /handle_regions.php \
  [NC,E=REGION:${mapregions:$1|notfound}]

所以它所做的基本上是:如果你请求一个像/region/(.*)/它重定向到的URL/handle_regions.php并设置一个环境变量,REGION 那么我只检查它是否被找到:如果没有,我停止:

RewriteCond %{ENV:REGION} notfound
# "not found" = 404 :
RewriteRule .* - [R=404,L]

然后你就在这里。很抱歉,但有了我刚才说的这些,你有足够的材料来解决你的问题。我没有时间为你做所有的事情,对不起,我尽我所能帮助你……我希望这能有所帮助!

答案2

那将会是这样的:

RewriteEngine On
RewriteCond %{http_host} !^customer1\.com\/app\/$
RewriteRule ^/?(.*)$ http://customer1.com/app/customers/customer1/$1

相关内容