Apache Redirecionando fora do DocumentRoot

1

Eu tenho uma estrutura de arquivos da seguinte forma:

- Site
  - includes
    - page.php
  - pages
    - example.php
  - public
    - .htaccess

.htaccess usa rewrite_module para resolver a maioria dos pedidos para page.php.

RewriteRule ^ "../includes/page.php" [L]

page.php analisa a solicitação original e inclui a "página" apropriada do diretório de páginas.

Eu quero que as solicitações iniciais sejam resolvidas para / Site / public, por isso tenho a seguinte configuração do apache:

<VirtualHost *:80>
        ServerName example.com
        DocumentRoot /Site/public
</VirtualHost>

Isso produz 400 erros de solicitação incorreta porque estou tentando redirecionar para um arquivo fora do DocumentRoot.

Em última análise, não quero que um usuário possa acessar diretamente arquivos fora do público.

Existe uma boa maneira de especificar que, em termos de execução, / Site é a raiz, mas em termos de veiculação / Site / público é a raiz?

    
por slifty 21.03.2013 / 21:30

1 resposta

3

Isso é muito comum.

Em vez de usar o .htaccess como roteador, você deve usar o PHP.

Editar: você NÃO PODE usar o .htaccess para rotear páginas fora do docroot.

Mantenha a maioria dos seus arquivos fora do docroot, mas mantenha index.php que lida com o roteamento. O PHP é capaz de incluir / requer arquivos fora do docroot, e isso é usado extensivamente em alguns frameworks PHP.

- Site
  - includes
    - page.php
  - pages
    - example.php
  - public
    - .htaccess
    - index.php ( <?php require_once('../includes/page.php'); ?>
    
por 21.03.2013 / 22:02

Tags