32

Jekyll で生成されたサイトを展開しようとしていますが、サイトをサーバー上の独自のサブフォルダーに保持して、すべてをより整理したいと考えています。

/jekyll基本的に、実際の Web ルートに同様の名前のファイルが存在しない限り、のコンテンツをルートとして使用したいと考えています。したがって、次のようなもの/jekyll/sample-page/http://www.example.com/sample-page/と表示され、次のようなものはhttp://www.example.com/other-folder/other-folder/と表示されます。

私のテストサーバーは Apache 2.2 を実行しており、以下( http://gist.github.com/97822.htaccessから適応) は問題なく動作します:

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 で、ディレクトリのスラッシュを説明する最善の方法は何ですか? /jekyll/実際の URL 構造を明らかにせずにディレクトリをサイト ルートとして使用するにはどうすればよいですか?

編集:

Apache 1.3 について多くの調査を行った結果、この問題は基本的に、Apache 1.3 URL Rewriting Guideに記載されている 2 つの異なる問題の組み合わせであることがわかりました。

私は (部分的に) 移動された DocumentRoot を持っています。これは、理論的には次のような方法で処理されます。

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

悪名高い「末尾のスラッシュ問題」もあり、これはRewriteBase(以下の応答の 1 つで提案されているように) を設定することで解決されます。

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

問題は、この 2 つを組み合わせることです。ドキュメント ルートの移動には使用しません (使用できませんか?) RewriteBase—末尾のスラッシュの修正には (?) それが必要です…うーん…</p>

4

3 に答える 3

69

一週間試した後、ついにそれを手に入れました。RewriteRulesは本当にブードゥーです…</p>

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。それは魔法のようにすべて動作します。

于 2010-03-14T21:53:29.640 に答える
13

以下を簡単に使用できます。

RewriteBase   /jekyll

そして、すべてはそこから始まります。

于 2010-03-08T14:59:02.113 に答える
5

私のために働いた唯一の簡単な解決策はここにあります

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 ファイルに入れます。

domain-name.com – 独自のドメイン名を入力します

フォルダー – テスト/開発 Web サイトがあるサブフォルダーの名前を入力します。

于 2019-07-30T08:24:24.750 に答える