Question

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

Pour l'essentiel, je voudrais utiliser le contenu de /jekyll comme la racine à moins qu'un fichier existe même nom dans la racine Web réelle. Donc, quelque chose comme /jekyll/sample-page/ montrerait que http://www.example.com/sample-page/, alors que quelque chose comme /other-folder/ afficherait comme http://www.example.com/other-folder.

Mon serveur de test fonctionne Apache 2.2 et le .htaccess suivant (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 fonctionne Apache 1.3, ce qui ne permet pas DirectorySlash. Si je le désactiver, le serveur donne une erreur 500 en raison de la surcharge de redirection interne.

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

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

... tout fonctionne la plupart du temps: http://www.example.com/sample-page/ affiche le contenu approprié. Cependant, si je laisse de côté la barre oblique, l'URL dans la barre d'adresse expose la vraie structure d'URL interne: http://www.example.com/jekyll/sample-page/

Quelle est la meilleure façon de rendre compte pour le répertoire slash dans Apache 1.3, où des outils utiles comme DirectorySlash n'existent pas? Comment puis-je utiliser le répertoire /jekyll/ comme la racine du site sans révéler la structure de l'URL réelle?

Modifier

Après une tonne de recherche sur Apache 1.3, j'ai trouvé que ce problème est essentiellement une combinaison de deux questions différentes énumérées au Apache 1.3 URL Rewriting Guide .

J'ai un (partiellement) déplacé DocumentRoot, qui en théorie devrait être pris en charge avec quelque chose comme ceci:

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

J'ai aussi le fameux « problème Slash traînante, » qui est résolu en mettant le RewriteBase (comme cela a été suggéré dans l'une des réponses ci-dessous):

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

Le problème combine les deux. Déplacement de la racine du document ne (peut pas?) Utiliser des barres obliques arrière RewriteBase-fixation nécessite (?), Il ... Hmm ...

Était-ce utile?

La solution

Enfin il a obtenu, après une semaine d'essayer. RewriteRules sont vraiment voodoo ...

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 within jekyll
# This does not expose the internal URL.
RewriteCond %{SCRIPT_FILENAME} -d
RewriteRule ^jekyll/(.*[^/])$ http://www.example.com/$1/ [R=301]

Pas besoin de DirectorySlash. Il magiquement tous les travaux.

Autres conseils

Vous pouvez simplement utiliser:

RewriteBase   /jekyll

Et tout commence à partir de ce moment-là.

La seule solution simple a fonctionné pour moi est

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain-name.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain-name.com$
RewriteCond %{REQUEST_URI} !folder/
RewriteRule (.*) /folder/$1 [L]

Mettez ce code dans votre fichier .htaccess.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top