Utiliser un sous-répertoire en tant que root avec htaccess d'Apache 1.3

Je suis en train de déployer un site généré avec Jekyll et de maintenir le site dans son propre sous-dossier sur mon serveur à tout garder plus organisé.

Essentiellement, je voudrais utiliser le contenu de /jekyll comme la racine, sauf si un fichier du même nom existe dans la racine du site web. Donc, quelque chose comme /jekyll/sample-page/ montrerait que http://www.example.com/sample-page/, tandis que quelque chose comme /other-folder/ d'affichage, comme http://www.example.com/other-folder.

Mon serveur de test utilise Apache 2.2 et suivants .htaccess (adapté de http://gist.github.com/97822) fonctionne parfaitement:

RewriteEngine On

# Map http://www.example.com to /jekyll.
RewriteRule ^$ /jekyll/[L]

# Map http://www.example.com/x to /jekyll/x unless there is a x in the web root.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/jekyll/
RewriteRule ^(.*)$ /jekyll/$1

# Add trailing slash to directories without them so DirectoryIndex works.
# This does not expose the internal URL.
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} !/$
RewriteRule ^(.*)$ $1/

# Disable auto-adding slashes to directories without them, since this happens
# after mod_rewrite and exposes the rewritten internal URL, e.g. turning
# http://www.example.com/about into http://www.example.com/jekyll/about.
DirectorySlash off

Cependant, mon serveur de production utilise Apache 1.3, ce qui ne permet pas DirectorySlash. Si je le désactiver, le serveur donne une erreur 500 en raison de redirection interne de surcharge.

Si je commente la dernière section de ReWriteConds et les règles:

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} !/$
RewriteRule ^(.*)$ $1/

...tout fonctionne majoritairement: http://www.example.com/sample-page/ affiche le contenu approprié. Cependant, si j'omets le slash de fin, l'URL dans la barre d'adresse expose le réel interne de la structure de l'URL: http://www.example.com/jekyll/sample-page/

Quel est le meilleur moyen de prendre en compte le répertoire des barres obliques dans Apache 1.3, où des outils utiles comme DirectorySlash n'existe pas? Comment puis-je utiliser le /jekyll/ répertoire de la racine du site sans révéler la véritable structure de l'URL?

Edit:

Après une tonne de recherches sur Apache 1.3, j'ai constaté que ce problème est essentiellement une combinaison de deux différentes questions inscrites à l' Apache 1.3 Guide de la Réécriture d'URL.

J'ai (partiellement) déplacement du répertoire DocumentRoot, qui, en théorie, serait pris en charge avec quelque chose comme ceci:

RewriteRule   ^/$  /e/www/ [R]

J'ai aussi le fameux "Slash Problème", qui est résolu par la mise en au RewriteBase (comme il était suggéré dans l'une des réponses ci-dessous):

RewriteBase    /~quux/
RewriteRule    ^foo$  foo/ [R]

Le problème est de combiner les deux. Le déplacement de la racine du document n'est pas (ne peut pas?) utilisation RewriteBasede fixation des barres obliques exige(?) il... Hmm...

  • c'est génial. Si j'ai plusieurs domaines pointant vers un serveur, est-il un moyen que je peux appliquer les règles ci-dessus en une manière conditionnelle? ainsi, si la demande de domainA.com ensuite exposer /domainA/ sous-dossier comme si c'était de la racine.. et si la demande de domainB.com, puis exposez subdir /domainB/ comme si c'était la racine?
  • utiliser nginx, il est beaucoup plus simple pour ce type de redirection.
InformationsquelleAutor Andrew | 2010-03-08