Mod-Rewrite chargement de fichiers derrière le DocumentRoot
-
08-06-2019 - |
Question
Je suis à l'aide d' .htaccess
et mod_rewrite
pour pointer vers les fichiers qui se trouvent derrière le DocumentRoot.Mon dossier structure ressemble à ceci:
home/
webroot/
other_files/
J'ai un .htaccess
fichier dans la racine de votre site avec le contenu suivant:
RewriteEngine on RewriteRule ^(.*)$ /home/other_files/$1
Si j'essaie d'accéder à http://example.com/file.html Je reçois l'erreur suivante:
L'URL demandée /home/other_files/file.html n'a pas été trouvée sur ce serveur.
Est-il même possible de charger des fichiers qui sont derrière le DocumentRoot?Si oui, quelqu'un peut me pointer dans la bonne direction?
La solution
Je crois que vous avez besoin d'ajouter une section avec des
<Directory "/home/other_files">
(options)
</Directory>
pour la configuration de votre serveur avant de apache sera en mesure de servir quelque chose de lui.Pour un exemple, mon DocumentRoot /var/www mais il y a cette section dans la valeur par défaut disponible sur les sites:
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>
Vous pouvez ensuite réécrire une URL pour aller à /doc/ et le serveur de savoir où obtenir les fichiers de.
Autres conseils
Juste pour que vous sachiez pourquoi cette règle ne fonctionne pas:
La raison qu'il n'est pas en mesure de réécrire /home/other\_files/file.html
est que le mod_rewrite est de l'analyse du chemin /home/webroot/home/other\_files/file.html
depuis de mod_rewrite point de vue de la barre oblique est équivalente à la racine du document de /home/webroot
.
Ryan Ahearn la suggestion de est un bon un, et est probablement la de l'itinéraire que vous voulez aller.
Le crédit va à Ryan Aheam, mais je vais le préciser.Je suis un débutant, et même avec Ryan réponse que j'ai eu à essayer quelques choses pour obtenir la syntaxe de droit.
Je voulais que mon DocumentRoot à mon cakephp répertoire.Mais ensuite, j'ai eu un Mantis Bug tracker, qui vient d'être régulier php et donc pas dans la cakephp répertoire.Les fichiers ci-dessous, j'ai la suite de travail.
http://www.my_website.com :servi par /var/www/cakephp
http://www.my_website.com/mantisbt :servi par /var/www/html/mantisbt
Fichier /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>
Le fichier /var/www/cakephp/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^mantisbt/?$ /mantisbt/ [NC,L]
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>