1

我已经将几个文件上传到我的服务器,这真的很莫名其妙。主页保存为index.html,当我输入该页面的 URL 时,它奇迹般地出现了,并且非常成功地显示了正确的页面。我的其他页面呢?我已使用以下代码从主页链接到它们:

<a href="http://www.example.com/about/">About Us</a>

我的 html 文件(大概称为 about.html)如何知道它的 URL 是“ http://www.example.com/about/ ”?我将这个问题称为“未回答的问题”,因为我查看了许多元数据示例,并且没有任何关于指定页面 URL 的内容。

4

6 回答 6

3

这取决于您运行的服务器类型。

静态网络服务器

如果它是最简单的静态文件服务器,没有 URL别名重写,那么 URL 将直接映射到文件:

如果您的“网络根目录”是/home/youruser/www/,那么这意味着:

http://www.example.com -> /home/youruser/www/

并且任何路径(域名之后的所有内容)都直接转换为该 Web 根目录下的路径:

http://www.example.com/about.html -> /home/youruser/www/about.html

如果没有指定文件(即 URL 以 a 结尾),通常 Web 服务器会自动查找“index.html”文件/

http://www.example.com/ -> /home/youruser/www/index.html
http://www.example.com/about/ -> /home/youruser/www/about/index.html

在 Apache 中,搜索的文件名可以使用DirectoryIndex指令进行配置:

DirectoryIndex index.html index.txt /cgi-bin/index.pl

这意味着对以 a 结尾的路径的每个请求/(并添加另一个规则,在某些常见设置下,如果路径是目录的名称,它将自动附加a ,例如“关于”):/

http://www.example.com/ -> /home/youruser/www/index.html
                        -> or /home/youruser/www/index.txt
                        -> or /home/youruser/www/cgi-bin/index.pl

具有路径解释的 Web 服务器

执行此功能的服务器类型太多,无法全部列出,但基本思想是程序捕获对服务器的请求,然后程序根据路径决定输出什么。

例如,一个程序可能会为基本匹配规则执行不同的路由:

*.(gif|jpg|css|js) -> look for and return the file from /home/user/static
blog/*             -> send to a "blog" program to generate the resulting page
                      using a combination of templates and database resources

示例包括:

  • Python
  • Java 小服务程序
  • Apache mod_rewrite(由 Wordpress 等使用)

HTML 页面中的链接

最后,HTML 页面中的链接只是更改了地址栏的 URL。无论服务器上存在什么,HTML 链接的行为都是相同的。反过来,服务器只响应 HTTP 请求,只生成浏览器使用的资源(HTML、图像、CSS、JavaScript 等)。服务器只为这些资源提供服务,与它们没有任何特殊的行为链接。

  • 绝对 URL是那些以方案开头的URL (例如http:您所做的)。当用户单击链接时,位置栏的全部内容将被替换。
  • 域相对 URL是那些以正斜杠 ( /) 开头的 URL。域名之后的所有内容都将替换为此链接的内容。
  • 相对 URL就是其他一切。URL中最后一个目录 ( /) 之后的所有内容都将替换为此链接的内容。

例子:

  • <a href="http://www.example.com/about/">Example.com about</a>我在“mydomain.com”上的页面可以像您所做的那样链接到您的站点。
  • 如果我将链接更改为,<a href="/about">about</a>那么它将链接到mydomain.com

回答你的问题

我的 html 文件(大概称为 about.html)如何知道它的 URL 是“ http://www.example.com/about/ ”?

首先,文件本身不知道它的 URL 是什么。除非:

  • HTML 是使用程序动态生成的。大多数服务器端语言都提供了一种方法来实现这一点。
  • 提供页面后,客户端脚本还可以检测当前 URL

其次,如果 URL 是/about并且文件实际上是,about.html那么您可能正在进行某种重写。 请记住,最简单的路径是直译,/aboutabout.html.

于 2013-09-01T01:10:31.120 回答
1

只需用于/about.html链接到页面

于 2013-09-01T01:04:06.950 回答
1

从理论上讲,文档中的 URL 最好是相对的,这样在更改域或文件位置时就不必更改它们。

例如,如果您将其从 localhost 移动到托管服务器。

在您的示例中,而不是www.example.com/about.html使用/about.html.

于 2013-09-01T01:06:18.050 回答
0

鉴于上面的链接,您需要一个名为 index.html 的 about 页面,该页面位于名为 about 的目录中,您的示例才能正常工作。然而,这不是常见的做法。

于 2013-09-01T01:05:04.390 回答
0

about.html不知道它的 URL 是什么,它是index.html调用您文件的about.html文件。

当您在任何给定目录中时,链接到该目录中的其他页面是通过一个简单的相对链接完成的:

<a href="/about.html">About Us</a>

向上移动一个目录,假设您在一个子文件夹(用户)中,也许您可​​以使用..操作符向上导航一个目录:

<a href="../about.html">About Us</a>

在您的情况下,您的关于页面与您链接的页面位于同一目录中,因此它只是转到正确的页面。

此外(我认为这可能是您要问的)如果您有:

about.html
about.php
about.phtml
about.jpg

例如,您访问http://www.yoursite.com/about它会自动调出 html 页面,如果您希望使用其他页面,则应在某处明确引用它们。

于 2013-09-01T01:33:49.757 回答
0

我有点困惑,但这里有一些信息。在尝试查看该目录时,任何名为“index”的文件都是任何目录(文件夹)的默认显示页面。

文件夹中的所有文件始终相对于该目录。因此,如果您的链接在一个文件中,在不同的目录中,那么您必须在该目录中键入该文件。如果是同一目录,则无需输入该目录,只需输入文件名即可。

于 2013-09-01T01:10:58.857 回答