Como devo separar páginas públicas e privadas no meu servidor web?

3

O que eu quero alcançar
Tenho sites públicos e privados no meu servidor, e gostaria de separá-los de alguma forma, mas quero que essa separação seja invisível.
Por exemplo, DocumentRoot é /var/www projetos públicos estão sob /var/www/public , projetos privados estão em /var/www/private .
Se o domínio for www.example.com e eu quiser alcançar public/publicproj1 , o URL será www.example.com/publicproj1 . Além disso, se eu quiser private/privateproj1 , o URL seria www.example.com/privateproj1 .
Desejo restringir /var/www/private apenas à rede local, mas public deve estar acessível de qualquer lugar.

Há uma tonelada de projetos em private , não quero fazer novas configurações em apache.conf toda vez que eu coloco algo lá.

Além disso, quero que /var/www/public/startingpage seja exibido se nada mais for solicitado, então www.example.com mostrará esta página.


O que eu tentei até agora:
1.) fez o DocumentRoot para /var/www colocar projetos públicos sob ele e uma regra de reconfiguração para a pasta private desta forma:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ private/$1 [QSA]

Isso não funciona, porque há mais arquivos .htaccess nas pastas em uma pasta privada. (por exemplo, aplicativos com front controller, fóruns, etc., que precisam de seu próprio .htaccess)

2.) fez DocumentRoot para /var/www/private , mas os projetos públicos não são servidos. (Posso criar duas raízes do documento com diferentes opções de acesso?) Fiz entradas como Alias /publicproj1 /var/www/publicproj1 mas tenho o Redmine instalado com estas configurações:

RewriteEngine On
RewriteRule   ^/$  /redmine  [R]

<Directory /home/www/redmine>
        RailsBaseURI /redmine
        PassengerResolveSymlinksInDocumentRoot on
</Directory>

que não posso substituir por uma simples entrada Alias (ou posso?)

Minhas perguntas
Qual estrutura de pastas devo criar? Quais regras de redirecionamento devo fazer? Como posso definir /var/www/startingpage para mostrar quando nada mais é solicitado?

    
por kissgyorgy 10.08.2012 / 08:55

2 respostas

3

OK, você deseja restringir o acesso a private projetos por endereço IP e você tem a seguinte estrutura de diretório:

  • DocumentRoot is /var/www
    • public projects are under /var/www/public
    • private projects are under /var/www/private

Então, no seu arquivo de configuração do Apache ( httpd.conf ), adicione uma diretiva <Directory> como:

<Directory /var/www/private>
   Order deny,allow
   Deny from all
   Allow from 10.0.0.0/24
</Directory>

e tudo sob esse diretório só será acessível se você estiver vindo da (s) rede (s) permitida (s). (Existem outras maneiras de especificar também os hosts Allow ed ).

My domain is www.example.com.
I want to reach /var/www/html/public/publicproj1 as www.example.com/publicproj1 and /var/www/html/private/privateproj1 as www.example.com/privateproj1

Isso é um pouco mais difícil. Você precisará de regras de reescrita ou de uma diretiva Alias para cada projeto. Como você observou, essa não é uma situação ideal, então vamos ver algumas outras opções.

Configurado como descrevi acima com a estrutura de diretórios que você tem, você poderá acessar os diretórios como www.example.com/public/proj1 e www.example.com/private/proj1 fora da caixa.
Se isso funciona para você, está feito.

Se essa não for uma solução boa o suficiente, considere mover seus projetos públicos para que eles fiquem diretamente abaixo de /var/www/html - seus projetos públicos seriam acessíveis como www.example.com/publicproj1 e seus projetos privados ficariam acessíveis com o /private/ bit added in. (Presumivelmente, você não se importa muito com um pouco feio na URL de um projeto "privado", e isso evita a necessidade de fazer qualquer Alias ing para seu material público).

Com relação à página inicial, você pode mostrar o conteúdo da pasta startingpage se www.example.com for solicitado com as seguintes regras:

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
    
por 10.08.2012 / 19:09
-1

Por que você não pode restringir essas pastas usando o método de proteção de senha .htaccess?

link

    
por 10.08.2012 / 09:19