Jekyllで生成されたサイトをデプロイしようとしています。サイトをサーバー上の独自のサブフォルダーに保持して、すべてをより整理しておきたいと思います。
基本的に、同じ名前のファイルが実際のWebルートに存在しない限り、/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/
DirectorySlash
のような便利なツールが存在しないApache 1.3でディレクトリのスラッシュを説明する最良の方法は何ですか?実際のURL構造を明らかにせずに、/jekyll/
ディレクトリをサイトルートとして使用するにはどうすればよいですか?
編集:
Apache 1.3に関する大量の調査の結果、この問題は本質的に Apache 1.3 URL Rewriting Guide にリストされている2つの異なる問題の組み合わせであることがわかりました。
私は(部分的に)移動したDocumentRootを持っています。これは理論的には次のようなもので処理されます。
RewriteRule ^/$ /e/www/ [R]
悪名高い "Trailing Slash Problem"もあります。これは、RewriteBase
を設定することで解決します(以下のいずれかの応答で提案されています)。
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
問題は2つを組み合わせることです。ドキュメントルートの移動ではRewriteBase
は使用できません(使用できませんか?)—末尾のスラッシュを修正する必要があります(?)それは…ふむ…
1週間試してみて、ようやく手に入れました。 RewriteRulesは本当にブードゥー教です…
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]
DirectorySlash
は必要ありません。それはすべて魔法のように機能します。
あなたは単に使うことができます:
RewriteBase /jekyll
そして、すべてはその時点から始まります。
私のために働いた唯一の簡単な解決策は here です
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]
このコードを.htaccessファイルに入れます。