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

第二个 RewriteRule 只会在服务器内部重写搜索路径。因此,当向客户端发送相对搜索路径时,请说:

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

第二个 RewriteRule中提到的任何内容$1都将包含在搜索路径中。

因此,如果客户端请求例如 www.example.com/en/ 并且href="CSS/main.css"发回包含相对路径的 HTML 文档,则客户端将期望 css 文件位于www.example.com/en/CSS,而不是www.example.com/CSS/。当然,如果示例中的 css 文档使用直接路径引用,例如:href="http://example.com/CSS/main.css"文档将被正确检索。

于 2013-02-10T19:53:27.707 回答