2013-02-08 59 views
1

如果请求是由相对路径进行的,Apache不会捕获下面的.htaccess规则。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首先被请求了全路径名。

这怎么可能?

+0

规则的想法是什么?我没有看到他们正在做任何事情,请解释。 – 2013-02-08 22:02:45

回答

0

第二个RewriteRule将只在内部重写搜索路径,在服务器上。所以,当一个相对的搜索路径被发送到客户端,说:

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

无论是在第二重写规则被称为$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",文档将被正确检索。