1

Вопрос:Htaccess для перенаправления на подкаталог на основе имени хоста

Что набор правил мне нужно сделать следующие переадресовывает:

[1] http://www.xyzblog.com/foo/bar.php => htdocs/projects/xyzblog/foo/bar.php 
[2] http://www.xyzblog.com/js/jquery-min.js => htdocs/js/jquery-min.js 

[3] http://www.bigcommerce.ch/images/baz.png => htdocs/projects/bigcommerce/images/baz.png 
[4] http://www.bigcommerce.ch/css/reset.css => htdocs/css/reset.css 

В работе [2] и [4] запрошенный файл существует в исходном пути, поэтому перенаправление не происходит.

фон:

У меня есть Энво WAMP, который использует Apache друг отличных XAMPP. Я работаю над несколькими проектами для различных клиентов и создали следующую структуру каталогов:

htdocs 
    + css 
    + images 
    + includes 
    + js 
    + projects 
    + bigcommerce 
    + xyzblog 
    ... 

Когда я начинаю работать над новым проектом, я создать каталог с таким же именем по проектам; кроме того, я называю проект после имени хоста клиента. Поэтому, если я начну работать над проектом, где производственный участок будет http://www. dreamvacation.com Я добавляю каталог dreamvacation в каталог проектов.

Наконец я временно, добавьте следующую строку в мой hosts файл в C:\WINDOWS\system32\drivers\etc

127.0.0.1 dreamvacation.com 

Таким образом, все запросы к dreamvacation.com будут закорочены на мой локальный.

Мне по-прежнему нужен один компонент, чтобы иметь возможность кодировать на локальном хосте и ожидать, что он будет вести себя одинаково при загрузке на производственный сервер. Это файл htaccess, чтобы проверить, что имя хоста находится в запросе, и перенаправить в каталог с тем же именем, что и идентификатор верхнего домена (.com, .net и т. Д.). Перенаправление должно выполняться только в том случае, если запрошенный файл не существует. Это последнее условие существует, потому что я размещаю часто используемые файлы в каталогах под htdocs - например, у меня есть только один jquery-min.js в htdocs/js и только один проект css в htdocs/css/blueprint/screen.css. Однако каждый проект также имеет подкаталог js, css, ... но только для файлов, специфичных для проекта.

Как это можно достичь?

+1

обычно сказано ... думаю об использовании 'vhosts' для этого. http://httpd.apache.org/docs/2.0/vhosts/examples.html – thedom

ответ

2

Вы должны обязательно взглянуть на с именем virtualhosts. Запуск корня каталога в каждом каталоге клиента. Это реальное решение :-)

Для ваших общих пользователей вы можете использовать команды «Alias ​​» в этих Virtualhost, чтобы некоторые каталоги всегда предназначались для тех же мест в дереве каталогов. и используйте ссылки для обмена общими папками.

В любом случае вы можете сделать это по-своему. Это что-то используется для Массовый виртуальный хостинг, где писать тысячи Virtualhosts - это боль, mode_rewrite - хорошее решение для замены.

Чтобы обнаружить существующие файлы и каталоги, вы можете использовать директивы RewriteCond и предотвратить переписывание, если файл существует. Затем на real переписать, вам нужно повторно использовать переменную apache %{HTTP_HOST}.Таким образом, я не проверял, но что-то подобное должно быть хорошей отправной точкой (пользователь RewriteLogLevel и RewriteLog для отладки) ,:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST}     ^www\.[^.]+\.com$ 
RewriteRule ^(.+)      %{HTTP_HOST}$1   [C] 
RewriteRule ^www\.([^.]+)\.com(.*) /htdocs/projects/$1$2 

Это на основе апача примеров документации для доменов на основе имени пользователя, вы должны отметьте this apache doc page для «массового виртуального хостинга» для получения более подробной информации, но некоторые из примеров включают в себя правила и проверки на основе файлов, которые вам не нужны на вашем dev env. Помните, что использование VirtualHosts без mod_rewrite, конечно, проще, но mod_rewrite может делать все, если захочет.

+0

Благодарим regilero. Я предпочитаю htaccess, потому что он позаботится об этом раз и навсегда. Таким образом, все, что мне нужно сделать, это добавить имена узлов в файл hosts, который является простым и быстрым. –

Смежные вопросы