1

リクエストが相対パスで行われる場合、Apacheは以下の.htaccessルールをキャッチしません。

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^(.*)/?$ index.php?var=$1 [NC,L]

たとえば、クライアントに送信されるHTMLに次のものが含まれている場合:

<link href="CSS/main.css" rel="stylesheet" type="text/css" />

Apacheはルールをスキップします。ただし、HTMLに次のものが含まれている場合:

<link href="http://host.com/CSS/main.css" rel="stylesheet" type="text/css" />

それはうまく機能します。

同じことが、CSSファイルなどの内部の相対パスにも当てはまります。

background-image:url(../images/image.png);

つまり、要求されたCSSが最初にフルパス名で要求された場合です。

これはどのように可能ですか?

4

1 に答える 1

0

2番目のRewriteRuleは、検索パスを内部的に、つまりサーバー上でのみ書き換えます。したがって、相対検索パスがクライアントに送信されるとき、次のように言います。

<link href="CSS/main.css" rel="stylesheet" type="text/css" />

$12番目のRewriteRuleで参照されるものはすべて、検索パスに含まれます。

したがって、たとえばwww.example.com/en/がクライアントから要求され、相対パスを含むHTMLドキュメントhref="CSS/main.css"が返送された場合、クライアントはcssファイルがにあることを期待しwww.example.com/en/CSSますwww.example.com/CSS/。当然、例のcssドキュメントが次のような直接パスで参照されている場合:href="http://example.com/CSS/main.css"ドキュメントは正しく取得されます。

于 2013-02-10T19:53:27.707 に答える