Mod-Rescrie încărcarea fișierelor în spatele DocumentRoot

Folosesc .htaccess și mod_rewrite pentru a indica fișierele care se află în spatele DocumentRoot. Structura folderului meu arată astfel:

home/
    webroot/
    other_files/

Am un fișier .htaccess în webroot cu următorul conținut:

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

Dacă încerc să accesez http://example.com/file.html , primesc următoarea eroare:

Adresa URL solicitată /home/other_files/file.html nu a fost găsită pe acest server.

Este posibil chiar și încărcarea fișierelor care se află în spatele DocumentRoot? Dacă da, poate cineva să mă îndrepte în direcția corectă?

0
fr hi bn

3 răspunsuri

Doar ca tu stii de ce regula nu functioneaza:

Motivul pentru care nu este capabil să rescrie la /home/other\_files/file.html este că mod_rewrite parsează calea ca /home/webroot/home/other \ _files/file.html deoarece din punctul de vedere al mod_rewrite, slash-ul precedent este echivalent cu root-ul de /home/webroot al documentului.

Ryan Ahearn's suggestion is a decent one, and is likely the route you want to go.

0
adăugat

Cred că trebuie să adăugați o secțiune


  (options)

la configurația serverului dvs. înainte de apache va fi capabil să servească ceva de la el. De exemplu, DocumentRoot-ul meu este/var/www, dar există această secțiune în site-ul disponibil implicit:

Alias /doc/ "/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

Apoi, puteți să rescrieți o adresă URL pentru a merge la/doc/și serverul să știe de unde să obțină fișierele.

0
adăugat
Am încercat Alias ​​într-un director în afara DocumentRoot fără o secțiune și a funcționat ...
adăugat autor Pere, sursa
frumos raspuns ! mulțumesc
adăugat autor Gabriel Sosa, sursa

Creditul este acordat lui Ryan Aheam, dar o voi spune. Sunt un începător și chiar și cu răspunsul lui Ryan trebuia să experimentez câteva lucruri pentru a obține dreptul de sintaxă.

Vroiam ca DocumentRoot să fie directorul meu de cakephp. Dar apoi am avut un tracker Mantis Bug care era doar un PHP regulat și deci nu în directorul cakephp. În fișierele de mai jos am următoarele lucruri.

http://www.my_website.com : served by /var/www/cakephp

http://www.my_website.com/mantisbt : served by /var/www/html/mantisbt

Fișierul /etc/httpd/conf/httpd.conf

Alias /mantisbt/ "/var/www/html/mantisbt/"                                                                          
                                                                                        
    AllowOverride All                                                                                               
                                                                                                        

                                                                                                  
    ServerAdmin [email protected]_email.com                                                                             
    DocumentRoot /var/www/cakephp                                                                                   
    ServerName my_website.com                                                                                      
                                                                                       
        AllowOverride All                                                                                           
                                                                                                        

Fișier /var/www/cakephp/.htaccess


    RewriteEngine on
    RewriteRule    ^mantisbt/?$   /mantisbt/  [NC,L]
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]

0
adăugat