Mod-Rewrite carregamento de arquivos de trás do DocumentRoot
-
08-06-2019 - |
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?
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>