Pergunta

Eu estou usando .htaccess e mod_rewrite para apontar para os arquivos que residem por trás do DocumentRoot.A minha estrutura de pastas parecido com este:

home/
    webroot/
    other_files/

Eu tenho um .htaccess arquivo webroot com o seguinte conteúdo:

RewriteEngine on
RewriteRule ^(.*)$ /home/other_files/$1

Se eu tentar acessar http://example.com/file.html Recebo o seguinte erro:

O URL solicitado /home/other_files/file.html não foi encontrado neste servidor.

É ainda possível carregar arquivos que estão por trás do DocumentRoot?Se assim for, alguém pode me apontar na direção certa?

Foi útil?

Solução

Eu acredito que você precisa para adicionar uma seção com

<Directory "/home/other_files">
  (options)
</Directory>

a configuração de seu servidor antes de apache será capaz de servir de nada.Para um exemplo, o meu DocumentRoot /var/www, mas não há esta seção no padrão de site disponíveis:

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Em seguida, você pode reescrever a URL para ir para /doc/ e o servidor poderá saber onde obter os arquivos de.

Outras dicas

Só assim você sabe por que essa regra não funciona:

A razão é que ele não é capaz de reescrever a /home/other\_files/file.html é que o mod_rewrite é analisar como o caminho /home/webroot/home/other\_files/file.html desde o mod_rewrite do ponto de vista anteriores barra é equivalente ao documento raiz de /home/webroot.

Ryan Ahearn sugestão é um decente, e é provável que a rota que você quer ir.

O crédito vai para Ryan Aheam, mas eu vou explicar.Eu sou um novato e ainda com Ryan resposta que eu tinha para experimentar algumas coisas para obter a sintaxe para a direita.

Eu queria que a minha DocumentRoot para ser meu cakephp directory.Mas, então, eu tinha um Mantis Bug tracker que foi apenas regular php, e por isso não o cakephp directory.Os arquivos abaixo eu tenho o seguinte trabalho.

http://www.my_website.com :servido por /var/www/cakephp

http://www.my_website.com/mantisbt :servido por /var/www/html/mantisbt

Arquivo /etc/httpd/conf/httpd.conf

Alias /mantisbt/ "/var/www/html/mantisbt/"                                                                          
<Directory "/var/www/html/">                                                                                        
    AllowOverride All                                                                                               
</Directory>                                                                                                        

<VirtualHost *:80>                                                                                                  
    ServerAdmin me@my_email.com                                                                             
    DocumentRoot /var/www/cakephp                                                                                   
    ServerName my_website.com                                                                                      
    <Directory /var/www/cakephp/>                                                                                   
        AllowOverride All                                                                                           
    </Directory>                                                                                                    
</VirtualHost>

Arquivo /var/www/cakephp/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^mantisbt/?$   /mantisbt/  [NC,L]
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top