Html Apache如何知道何时以及如何查找相对路径?

Html Apache如何知道何时以及如何查找相对路径?,html,apache,Html,Apache,如果我们有这样的文件结构: / ├── aboutus │   ├── aboutus.html │   └── logo.jpg ├── validate.php ├── index.html └── logo.jpg 虽然在链接到aboutus.html(即)时必须指定文件夹,但如果放置logo.jpg,Apache将知道加载哪个文件夹。它可能只在当前目录中查找文件。我的虚拟主机部分中有以下指令: RewriteCond %{REQUEST_URI} !^/validate.php Rew

如果我们有这样的文件结构:

/
├── aboutus
│   ├── aboutus.html
│   └── logo.jpg
├── validate.php
├── index.html
└── logo.jpg
虽然在链接到
aboutus.html
(即
)时必须指定文件夹,但如果放置
logo.jpg
,Apache将知道加载哪个文件夹。它可能只在当前目录中查找文件。我的虚拟主机部分中有以下指令:

RewriteCond %{REQUEST_URI} !^/validate.php
RewriteRule ^/(.*) /validate.php?uri=$1
我是一个完全不懂这些重写规则的新手,所以这就是我希望上面所说的:我希望它拦截来自浏览器的任何请求。这些包括在地址栏中输入的请求,以及来自网页内的请求(即js文件、图像…)。接下来,我想将请求的文件发送到
validate.php


validate.php
显然会验证用户,但本质上只是返回用户请求的任何文件。如果
aboutus.html
像这样插入图片
,我如何确保
validate.php
返回
/aboutus/logo.jpg
,而不是
/logo.jpg

基本上,绝对路径是由基本资源URL和相对资源URL确定的(更多信息)。为了使您的
validate.php
能够正确解析图像、样式表等的相对URL,您应该以某种方式让它知道包含这些资源的文档的绝对URL(如果文档有标签,这更为棘手)。

无论如何,在htaccess文件中,您总是使用绝对路径。我的意思是从根斜杠开始

尝试使用:

RewriteCond %{REQUEST_URI} !^/validate.php
RewriteRule ^(.*) /validate.php?uri=$1

Puk,你必须把两个方面分开:

  • 任何HTTP请求(如GET都是绝对的,浏览器将根据引用文档的路径(或
    标记中定义的路径)转换任何相对href或src属性因此,如果加载
    http://somehost/fred/xx.html
    然后引用图像
    style1/images/pic.png
    浏览器将请求
    http://somehost/fred/style1/images/pic.png

  • mod_rewrite如何处理路径是完全不同的。这是服务器的业务。请参阅,其中解释了如何在每服务器配置(apache.conf或vhost.conf)和每目录配置(例如在
    .htaccess
    或块中)内评估相对路径和绝对路径