Назад | Перейти на главную страницу

Перезапись 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 по умолчанию DocumentRoot установлен в / data / www / cms /.

Я пытаюсь получить URL-адрес http://www.foo.com/app/assets/css/bg.png для возврата файла из указанного каталога данных клиентов, то есть /data/www/cms/app/customers/foo.com/assets/css/bg.png.

Я не знаю о .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}]

Итак, что он делает: если вы запрашиваете URL-адрес, например /region/(.*)/ он перенаправляет на /handle_regions.php и устанавливает переменную среды REGION Потом просто проверяю, найдено ли оно: если нет - останавливаюсь:

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

И вот вы здесь. Извините, но со всем, что я только что сказал, у вас достаточно материала для решения вашей проблемы. У меня нет времени делать все за тебя, извини, чувак, я сделал все, что мог, чтобы тебе помочь ... и я надеюсь, что это поможет!

Это будет примерно так:

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