Reescrevendo o URL com base no nome do host

1

É possível usar o arquivo .htaccess para reescrever isto:

link

para isso:

link ?

Se é então como?

EDIT: O objetivo é evitar qualquer atualização no .htaccess quando um novo cliente é adicionado EDIT2:

Eu vejo que minha pergunta tem sido muito vaga. Eu tenho um CMS que está sendo usado para muitos clientes diferentes (www.foo.com, www.bar.com, www.somerandomname.com). Cada cliente tem seus arquivos exclusivos (design, uploads) em um diretório / data / www / cms / customers / XXXXXX / onde XXXXXX é o nome do cliente. O arquivo de configuração do Apache tem o DocumentRoot padrão configurado em / data / www / cms /.

O que eu estou tentando fazer é ter o link de para retornar um arquivo do diretório de dados dos clientes, ou seja, /data/www/cms/app/customers/foo.com/assets/css/bg.png.

    
por Henno 20.10.2011 / 16:04

2 respostas

2

Eu não sei sobre o arquivo .htaccess , mas tenho certeza que isso funcionaria:

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

Explicação:

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

colocará na variável ' %1 ' o número do cliente, ou seja, ' 1 '

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

Significa: se o caminho começa com ' /app/ ', reescreva-o para /app/customers/customer e adicione a variável ' %1 ' (ou seja, ' 1 ' em nosso exemplo) ele deve funcionar com o que você está pedindo: reescreva para http://customer1.com/app/customers/customer1/ .

Sinto muito, mas sua pergunta não é muito precisa, e você deve dar mais exemplos, ou ser mais específico do que você quer fazer, mas eu fiz o meu melhor para ajudá-lo.

Você também pode usar a diretiva RewriteMap . Imagine que você coloque todos os sites dos seus clientes e os diretórios corretos assim:

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  

então eu uso um RewriteRule assim:

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

Então, o que acontece é basicamente: se você pedir um URL como /region/(.*)/ , ele redireciona para /handle_regions.php e define uma variável de ambiente REGION Então eu apenas checo se foi encontrado: se não, eu paro:

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

E então aqui está você. Sinto muito, mas com todas as coisas que acabei de dizer, você tem material suficiente para resolver o seu problema. Eu não tenho tempo para fazer todas as coisas para você, desculpe cara, eu fiz o melhor que pude para ajudá-lo ... e espero que isso ajude!

    
por 21.10.2011 / 10:28
-1

Isso será algo como:

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