Чего я хочу достичь
У меня есть общедоступные и частные сайты на моем веб-сервере, и я хотел бы как-то разделить их, но я хочу, чтобы это разделение было невидимым.
Так, например, DocumentRoot - это /var/www
общественные проекты находятся в стадии /var/www/public
, частные проекты находятся в стадии /var/www/private
.
Если домен www.example.com
и я хочу достичь public/publicproj1
URL будет www.example.com/publicproj1
. Также, если я хочу private/privateproj1
URL будет www.example.com/privateproj1
.
Я хочу ограничить /var/www/private
только в локальную сеть, но public
должен быть доступен откуда угодно.
Есть тонна проектов под private
, Я не хочу делать новые настройки в apache.conf
каждый раз я что-то туда кладу.
Также хочу /var/www/public/startingpage
быть обслуженным, если больше ничего не запрашивается, поэтому www.example.com
покажет эту страницу.
Что я пробовал до сих пор:
1.) сделал DocumentRoot для /var/www
поместите в него публичные проекты и Правило перезаписи private
такую папку:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ private/$1 [QSA]
Это не работает, потому что в папках в личной папке больше файлов .htaccess. (например, приложения с фронт-контроллером, форумы и т. д., которым нужен собственный .htaccess)
2.) сделал DocumentRoot для /var/www/private
, но тогда публичные проекты не обслуживаются. (Могу ли я создать два корневых документа с разными параметрами доступа?) Я сделал такие записи, как Alias /publicproj1 /var/www/publicproj1
но у меня установлен Redmine с такими настройками:
RewriteEngine On
RewriteRule ^/$ /redmine [R]
<Directory /home/www/redmine>
RailsBaseURI /redmine
PassengerResolveSymlinksInDocumentRoot on
</Directory>
который я не могу заменить простым Alias
вход (или я могу?)
Мои вопросы
Какую структуру папок мне создать? Какие правила редиректа я должен установить? Как я могу установить /var/www/startingpage
появиться, когда больше ничего не запрашивается?
Хорошо, значит, вы хотите ограничить доступ к private
проекты по IP-адресу, и у вас будет следующая структура каталогов:
DocumentRoot
является/var/www
- общественные проекты находятся в стадии
/var/www/public
- частные проекты находятся под
/var/www/private
Итак, в вашем файле конфигурации Apache (httpd.conf
) добавить <Directory>
директива вроде:
<Directory /var/www/private>
Order deny,allow
Deny from all
Allow from 10.0.0.0/24
</Directory>
и все, что находится в этом каталоге, будет доступно только в том случае, если вы заходите из разрешенных сетей. (Есть другие способы указать Allow
Эд Хозяева тоже).
Мой домен
www.example.com
.
Я хочу достичь/var/www/html/public/publicproj1
так какwww.example.com/publicproj1
и/var/www/html/private/privateproj1
так какwww.example.com/privateproj1
Это немного сложнее. Вам понадобятся правила перезаписи или Alias
директива для каждого проекта. Как вы заметили, это не идеальная ситуация, поэтому давайте рассмотрим другие варианты.
Настроенный, как я описал выше, с имеющейся у вас структурой каталогов, вы сможете получить доступ к каталогам как www.example.com/public/proj1
и www.example.com/private/proj1
из коробки.
Если это сработает для вас, все готово.
Если это недостаточно хорошее решение, подумайте о том, чтобы переместить свои общедоступные проекты, чтобы они находились непосредственно в /var/www/html
- ваши публичные проекты будут доступны как www.example.com/publicproj1
, и ваши частные проекты будут доступны с /private/
добавлен бит (по-видимому, вас не слишком заботит некрасивый URL-адрес "частного" проекта, и это позволяет избежать необходимости делать какие-либо Alias
ing для ваших общедоступных материалов).
Что касается стартовой страницы, вы можете показать содержимое startingpage
папка, если www.example.com
запрашивается по следующим правилам:
RewriteEngine On
# Don't apply to URLs that go to existing files or folders.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Only apply to URLs that aren't already under folder.
RewriteCond %{REQUEST_URI} !^/startingpage/
RewriteRule ^(.*)$ /startingpage/$1
Почему вы не можете ограничить эти папки с помощью метода защиты паролем .htaccess?
http://viralpatel.net/blogs/password-protect-your-webpages-using-htaccess/