Pregunta

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.

En esencia, me gustaría usar el contenido de /jekyll como la raíz a menos que exista un archivo llamado de manera similar en la raíz web real. Así que algo como /jekyll/sample-page/ mostraría como http://www.example.com/sample-page/, mientras que algo como /other-folder/ exhibiría como http://www.example.com/other-folder.

Mi servidor de prueba se ejecuta Apache 2,2 y la siguiente .htaccess (adaptado de http://gist.github.com/97822 ) funciona a la perfección:

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 se ejecuta Apache 1.3, que no permite DirectorySlash. Si desactivo, el servidor da un error 500 debido a la sobrecarga de redireccionamiento interno.

Si comento hacia fuera la última sección de ReWriteConds y reglas:

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

... todo funciona sobre todo: http://www.example.com/sample-page/ muestra el contenido correcto. Sin embargo, si omito la barra final, la dirección URL en la barra de direcciones URL expone la estructura interna real: http://www.example.com/jekyll/sample-page/

¿Cuál es la mejor manera de dar cuenta de directorio de barras en Apache 1.3, cuando sea útil como herramientas DirectorySlash no existen? ¿Cómo puedo usar el directorio /jekyll/ como la raíz del sitio sin revelar la estructura URL real?

Editar

Después de una tonelada de investigación en Apache 1.3, he encontrado que este problema es esencialmente una combinación de dos cuestiones diferentes que figuran en el Guía de reescritura de Apache 1.3 URL .

Tengo un (parcialmente) se trasladaron DocumentRoot, que en teoría se podría hacer cargo de algo como esto:

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

También tengo la infame "Problema barra final", que se resuelve mediante el establecimiento de la RewriteBase (como se sugirió en una de las respuestas a continuación):

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

El problema es la combinación de los dos. Mover la raíz del documento no (puede no?) RewriteBase utilizar la fijación de barra final requiere (?) Que ... Hmm ...

¿Fue útil?

Solución

Finalmente lo consiguió, después de una semana de tratar. 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]

No hay necesidad de DirectorySlash. Mágicamente todas las obras.

Otros consejos

Usted puede simplemente utilizar:

RewriteBase   /jekyll

Y todo comienza desde ese punto.

La única solución simple que funcionó para mí es aquí

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]

Pon este código en su archivo .htaccess.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top