是否可以使用.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