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

Как мне разделить общедоступные и частные страницы на моем веб-сервере?

Чего я хочу достичь
У меня есть общедоступные и частные сайты на моем веб-сервере, и я хотел бы как-то разделить их, но я хочу, чтобы это разделение было невидимым.
Так, например, 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-адрес "частного" проекта, и это позволяет избежать необходимости делать какие-либо Aliasing для ваших общедоступных материалов).


Что касается стартовой страницы, вы можете показать содержимое 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/