2014-12-14 3 views
0

Для среды dev Мой DocumentRoot в apache указывает на/var/www. Эта папка содержит следующую структуру:Mod_rewrite для конкретного базового подкаталога auth пользователя

/var/www/username1/projectname/ 
/var/www/username2/projectname/ 
/var/www/username3/projectname/ 

Использование .htaccess/.htpasswd кому-то необходимо войти в систему с помощью базовой аутентификации. Когда пользователь войдет в систему, он будет перемещен в /var/www/[hisorherusername]/[projectname]/. Используя этот метод, каждый разработчик должен указывать на свой собственный код, сохраняя при этом тот же субдомен.

Например, когда username1 посещает projectname.dev.mycompany.com. Затем этому пользователю будет показан код в/var/www/username1/projectname /.

Я хочу предотвратить использование динамических виртуальных хостов, используя разные поддомены для каждого пользователя. Обычно это происходит при использовании CMS.

Я прошел долгий путь, но застрял в использовании правил перезаписи. Это то, что у меня есть сейчас:

AuthType Basic 
AuthName "The DEV" 
AuthUserFile /var/www/.htpasswd 
Require valid-user 

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^([^\.]+).dev.company.com$ 
RewriteRule ^(.+)$ /%{REMOTE_USER}/%1/html/$1 

Это приводит к бесконечному потоку внутренних переадресаций. Когда я изменяю последнее правило перезаписи на ^$ вместо^(. +) $, Он отлично работает для корневого URL-адреса, но не для всех других URL-адресов. Они будут переписаны вместо/var/www/$ 1. Я попробовал добавить условие, чтобы проверить, нет ли мы в /% {REMOTE_USER}, но это, похоже, не решает ничего.

Я вижу, что происходит, но я не вижу решения. Мне нравится препятствовать добавлению в подкаталоги другого правила .htaccess, так как это следует объединить вместе с файлами .htaccess самих проектов.

ответ

0

Я думаю, что, наконец, нашел его сам. Это может помочь людям в будущем. Первый шаг - создать виртуальный хост для/var/www /. Там вы храните следующий файл .htaccess:

AuthType Basic 
AuthName "Typify DEV" 
AuthUserFile /var/www/.htpasswd 
Require valid-user 

RewriteEngine on 
RewriteCond %{REQUEST_URI} !/users/(.+)$ 
RewriteCond %{HTTP_HOST} ^([^\.]+).dev.company.com$ 
RewriteRule ^(.*)$ /users/%{REMOTE_USER}/%1/html/$1 

К сожалению, вы не можете использовать% {REMOTE_USER} в вашем сравнении переписывают условия. Вы можете использовать регулярные выражения только с правой стороны. Таким образом, я переместил все пользовательские каталоги в подкаталоге 'пользователей:

/var/www/users/username1/project1 

Теперь я могу распознать, если она уже была переписана в этот подкаталог. Довольно простое решение.

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