Mod-Rewrite il caricamento di file dietro la DocumentRoot
-
08-06-2019 - |
Domanda
Sto utilizzando .htaccess
e mod_rewrite
per scegliere i file che si trovano dietro la DocumentRoot.La mia struttura di cartelle simile a questo:
home/
webroot/
other_files/
Ho un .htaccess
file nella webroot con il seguente contenuto:
RewriteEngine on RewriteRule ^(.*)$ /home/other_files/$1
Se provo ad accedere http://example.com/file.html Ho visualizzato il seguente messaggio di errore:
L'URL richiesto /home/other_files/file.html non è stato trovato su questo server.
È anche possibile caricare i file che si trovano dietro la DocumentRoot?Se è così, qualcuno può mi punto nella giusta direzione?
Soluzione
Io credo che avete bisogno di aggiungere una sezione con
<Directory "/home/other_files">
(options)
</Directory>
per la configurazione del server prima di apache sarà in grado di servire qualsiasi cosa.Per un esempio, il mio DocumentRoot /var/www ma c'è questa sezione predefinita disponibile sito:
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>
Si può quindi riscrivere l'URL andare in /doc/ e il server sarebbe sapere dove prendere i file.
Altri suggerimenti
Solo così si sa perché la regola non funziona:
Il motivo è che non è in grado di riscrivere /home/other\_files/file.html
è che il mod_rewrite è l'analisi del percorso /home/webroot/home/other\_files/file.html
fin da mod_rewrite punto di vista la precedente slash è equivalente a la radice del documento di /home/webroot
.
Ryan Ahearn suggerimento è una decente, ed è probabile che il percorso che si desidera andare.
Il merito va a Ryan Aheam, ma ho intenzione di chiarirne il significato.Sono un principiante e anche con Ryan risposta ho dovuto sperimentare con un paio di cose per ottenere la sintassi giusta.
Volevo che il mio DocumentRoot di essere il mio cakephp directory.Ma poi ho avuto un Mantis Bug tracker che era solo di regolare php e quindi non in cakephp directory.Il file elencati di seguito ho il seguente lavoro.
http://www.my_website.com :servita da /var/www/cakephp
http://www.my_website.com/mantisbt :servita da /var/www/html/mantisbt
Il File /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>
File /var/www/cake/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^mantisbt/?$ /mantisbt/ [NC,L]
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>