Frage

Ich versuche, eine Website mit Jekyll erzeugt zu implementieren und möchte auf meinem Server die Website in einem eigenen Unterordner halten alles zu halten, besser organisiert.

Im Grunde möchte ich den Inhalt /jekyll als Wurzel verwenden, wenn eine Datei in ähnlicher Weise in dem aktuellen Web-Root genannt existiert. So etwas wie /jekyll/sample-page/ würde zeigen, wie http://www.example.com/sample-page/, während so etwas wie /other-folder/ wie http://www.example.com/other-folder.

Mein Test-Server läuft Apache 2.2 und die folgende .htaccess (angepasst von http://gist.github.com/97822 ) funktioniert einwandfrei:

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

Allerdings ist meine Produktionsserver läuft Apache 1.3, die nicht DirectorySlash zulässt. Wenn ich es zu deaktivieren, gibt der Server einen 500-Fehler wegen interner Redirect Überlastung.

Wenn ich den letzten Abschnitt ReWriteConds Kommentar und Regeln:

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

... alles meist funktioniert: http://www.example.com/sample-page/ zeigt den richtigen Inhalt. Wenn ich jedoch den abschließenden Schrägstrich, die URL in der Adressleiste macht die reale interne URL-Struktur auszulassen: http://www.example.com/jekyll/sample-page/

Was ist der beste Weg, um Konto für Verzeichnis in Apache schlitzt 1.3, wo nützliche Tools wie DirectorySlash gibt es nicht? Wie kann ich das /jekyll/ Verzeichnis wie der Site-Stamm, ohne die tatsächliche URL-Struktur enthüllt?

Edit:

Nach einer Tonne Forschung in Apache 1.3, Ich habe festgestellt, dass dieses Problem ist im Wesentlichen eine Kombination aus zwei verschiedenen Themen aufgelistet auf dem Apache 1.3 URL-Manipulation .

Ich habe eine (teilweise) bewegt DocumentRoot, die in der Theorie Pflege mit so etwas wie dies gemacht werden würde:

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

Ich habe auch das berüchtigte „Nachgestellte Slash Problem“, die durch Einstellen des RewriteBase gelöst wird (wie in einen der Antworten unten vorgeschlagen wurde):

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

Das Problem der beiden ist die Kombination. Bewegen des Document-Root nicht (nicht?) Verwenden RewriteBase Festsetzungsschrägstriche Hinter erfordert (?) Es ... Hmm ...

War es hilfreich?

Lösung

Schließlich bekam es nach einer Woche zu versuchen. RewriteRules wirklich sind 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]

Keine Notwendigkeit für DirectorySlash. Es magisch alles funktioniert.

Andere Tipps

Sie können einfach verwenden:

RewriteBase   /jekyll

Und alles beginnt von diesem Punkt aus.

Die einzige einfache Lösung für mich gearbeitet wird hier

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]

Setzen Sie diesen Code in Ihre .htaccess-Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top