Use un subdirectorio como raíz con htaccess en Apache 1.3
.htaccess jekyll (2)
Finalmente lo conseguí, después de una semana de intentarlo. RewriteRules realmente son vudú ...
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]
Sin necesidad de DirectorySlash
. Magicamente todo funciona.
Estoy tratando de implementar un sitio generado con Jekyll y me gustaría mantener el sitio en su propia subcarpeta en mi servidor para mantener todo más organizado.
Básicamente, me gustaría utilizar el contenido de /jekyll
como raíz a menos que exista un nombre similar en la raíz web real. Así que algo como /jekyll/sample-page/
se mostraría como http://www.example.com/sample-page/ , mientras que algo como /other-folder/
se mostraría como http://www.example.com/other-folder .
Mi servidor de prueba ejecuta Apache 2.2 y el siguiente .htaccess
(adaptado de http://gist.github.com/97822 ) funciona perfectamente:
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
Sin embargo, mi servidor de producción ejecuta Apache 1.3, que no permite DirectorySlash
. Si lo desactivo, el servidor da un error de 500 debido a una sobrecarga de redirección interna.
Si comento la última sección de ReWriteConds y reglas:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} !/$
RewriteRule ^(.*)$ $1/
... todo funciona principalmente: http://www.example.com/sample-page/ muestra el contenido correcto. Sin embargo, si omito la barra diagonal, la URL en la barra de direcciones expone la estructura URL interna real: http://www.example.com/jekyll/sample-page/
¿Cuál es la mejor manera de dar cuenta de las barras de directorios en Apache 1.3, donde no existen herramientas útiles como DirectorySlash
? ¿Cómo puedo usar el directorio /jekyll/
como raíz del sitio sin revelar la estructura de URL real?
Editar:
Después de una tonelada de investigación sobre Apache 1.3, descubrí que este problema es esencialmente una combinación de dos problemas diferentes enumerados en la Guía de reescritura de URL de Apache 1.3 .
Tengo un DocumentRoot (parcialmente) movido, que en teoría sería solucionado con algo como esto:
RewriteRule ^/$ /e/www/ [R]
También tengo el infame "Problema de RewriteBase
", que se resuelve configurando RewriteBase
(como se sugirió en una de las respuestas a continuación):
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
El problema es combinar los dos. Mover la raíz del documento no (¿no puede?) Utilizar RewriteBase
-fijación de barras diagonales requiere (?) ... Hmm ...
Puedes simplemente usar:
RewriteBase /jekyll
Y todo comienza desde ese punto.