Я пытаюсь развернуть сайт, созданный с помощью Jekyll, и хотел бы сохранить сайт в своей собственной подпапке на моем сервере, чтобы все было более организованно.
По сути, я хотел бы использовать содержимое /jekyll
в качестве корневого каталога, если только файл с аналогичным именем не существует в реальном веб-корне. Так что что-то вроде /jekyll/sample-page/
будет отображаться как http://www.example.com/sample-page/,, а что-то вроде /other-folder/
будет отображаться как http://www.example.com/other-folder.
Мой тестовый сервер работает под управлением Apache 2.2, а следующий .htaccess
(адаптированный с http://gist.github.com/97822) работает безупречно:
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
Однако мой рабочий сервер работает под управлением Apache 1.3, что не позволяет DirectorySlash
. Если я отключу его, сервер выдаст ошибку 500 из-за внутренней перегрузки перенаправления.
Если я закомментирую последний раздел ReWriteConds и правила:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} !/$
RewriteRule ^(.*)$ $1/
… все в основном работает: http://www.example.com/sample-page/ отображает правильное содержание. Однако, если я опущу косую черту, URL в адресной строке будет отображать реальную внутреннюю структуру URL: http://www.example.com/jekyll/sample-page/
Каков наилучший способ учета слешей каталогов в Apache 1.3, где не существует таких полезных инструментов, как DirectorySlash
? Как я могу использовать каталог /jekyll/
в качестве корня сайта, не раскрывая фактическую структуру URL?
Edit:
После множества исследований Apache 1.3 я обнаружил, что эта проблема, по сути, является комбинацией двух разных проблем, перечисленных в Руководстве по перезаписи URL-адресов Apache 1.3 .
У меня есть (частично) перемещенный DocumentRoot, о котором теоретически можно было бы позаботиться о чем-то вроде этого:
RewriteRule ^/$ /e/www/ [R]
У меня также есть печально известная «проблема с косой чертой», которая решается установкой RewriteBase
(как было предложено в одном из ответов ниже):
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
Проблема в сочетании двух. Перемещение корня документа не использует (не может?) RewriteBase
- для исправления косых черт требуется (?) Это… Хмм…