1

是否有普遍接受的方法让所有链接和对图像、脚本、样式表的引用都相对于某个路径,而不管当前文档的 URL 是什么?

让我们从头开始。我正在用 PHP 开发一个自定义内容管理系统。我正在使用mod_rewrite重定向所有请求http://domain.com/path/artist/edit/25,例如http://domain.com/path/index.php?url=/artist/edit/25. 所以URL后面的部分http://domain.com/path/实际上是虚拟的。

我希望所有链接都采用类似的格式,并以类似的格式<a href="artist/show">...</a>引用图像、脚本等<link href="ui/css/style.css"...>

好吧,这似乎是可能的:

    ...
    <base href="http://domain.com/path/" />
    ...

通过这种方式,我可以通过如下方式链接到脚本和样式表:

    ...
    <!-- Custom page style CSS -->
    <link href="ui/css/style.css" rel="stylesheet" type='text/css'>
    <!-- Support for CSS3 media query in IE8 -->
    <script type="text/javascript" src="ui/js/respond.js"></script>
    <!-- MooTools 1.6.0 -->
    <script type="text/javascript" src="ui/js/MooTools-Core-1.6.0.js"></script>
    ...

但是,AFAIK<base href=...>应该匹配当前页面请求(即http://domain.com/path/artist/edit/25)。它破坏了整个概念。

这就是为什么我需要你澄清:

  1. <base href=...>指向目录而不是当前文档 URL是一种普遍接受的做法吗?
  2. 这种做法是否符合 HTML<base>元素的使用要求?
  3. 它会以任何方式影响像 Googlebot 这样的爬虫吗?他们是否需要<base href=...>匹配每个特定的文档 URL?

我也想知道当 URL 的某些部分是虚拟的时,您如何解决相对链接和资源引用的问题。我发现像 WordPress 这样的项目倾向于完全避免相对链接并采用“绝对链接方式”。

4

3 回答 3

1

指向目录而不是当前文档 URL 是一种普遍接受的做法吗?

不,这并不常见。事实上,我想说这很不常见,因为没有它,有更好的方法来创建您网站的逻辑信息架构。

它会以任何方式影响像 Googlebot 这样的爬虫吗?他们是否需要匹配每个特定的文档 URL?

很难让基本标签正确,并且有一些方法可以使用对 googlebot 等透明的更好方法来做你想做的事情。

请注意,绝对链接是您在源代码中看到的,但这并不意味着链接物理映射到目录和文件等。使用 apache 上的 mod_rewrite 之类的工具,您可以用几乎任何方式构建您的网站物理文件系统,我也建议这样做,因为随着事情的变化,您不会被绑定到特定的解决方案。这也是为什么大多数 php 应用程序通过index.php脚本发送所有内容,然后应用程序控制信息架构而不是文件系统的原因。

于 2016-04-28T05:01:37.100 回答
1

“base href”可以毫无问题地使用,但它并不总是最好的解决方案。如果您的服务器将使用不同的服务器名称和路径(例如“ http://www.example.com/companysection/especificservice ”和“ http://service.internalnetwork.dev/ ”)回答请求,那很好

恕我直言,这不是您的情况的最佳解决方案。

在 URL“ http://example.com/path/index.php?url=/artist/edit/25 ”中,您希望将部分查询转换为路径(基本 example.com/path/index.php ? url= )... 这可能是个大问题。您将如何处理也有查询的查询?(例如接收搜索词或表单 GET)

正如 Harry 回答所建议的那样(或 nginx 重写规则),Apache mod_rewrite 将是一个更好的选择。有了它,您可以轻松地“转换” http://example.com/path/artist/edit/25?search=something&order=ASC中的请求,例如http://example.com/path/index.php?url=artist /edit/25&search=something&order=ASC 从长远来看,这将减少您的问题。

检查https://wiki.apache.org/httpd/RewriteQueryString中的最后一个示例,它非常接近满足您所有的重写需求(您只需要确保正确处理其余查询)

获取http://example.com/path/var/val形式的 URL并将其转换为 var=val 查询http://example.com/path?var=val。基本上与上述配方相反。此示例适用于任何有效的三级 URL。http://example.com/path/var/val将被转换为http://example.com/path?var=val

重写规则 ^/path/([^/]+)/([^/]+) /path?$1=$2

于 2016-05-01T09:14:15.023 回答
1

base元素的全部意义在于指定用于解析相对链接而不是当前文档 URL 的任意基本 URL。否则,该元素将没有意义,因为默认情况下当前文档 URL 被用作基本 URL。

主要爬虫支持绝对和相对 URL 以及base元素。一些摇和烘烤爬虫不理解相对 URL 和/或不支持该base元素(因此导致您的服务器日志中有多个 404 行,尽管这是一件小事)。

我建议不要使用该base元素。相对链接往往容易出错,从而导致错误解析的 URL,而不会提供任何严重的好处。始终使用绝对 URL 通常更合理、更容易。

于 2016-04-24T16:45:37.147 回答