【问题标题】:Does using '/' as a seperator in sementic URLs always require absolute paths在语义 URL 中使用“/”作为分隔符是否总是需要绝对路径
【发布时间】:2014-05-13 08:14:33
【问题描述】:

我们是 mod_rewrite 和语义 URL 的新手,尽管研究了 Google 和 SO,我们仍然无法找到这个问题的明确答案。

当我们在 .htaccess 中使用正斜杠作为分隔符时,我们 html 中的所有图像、css 和 js 引用都必须从相对路径重写为绝对路径。

例如:

RewriteRule ^([A-Za-z0-9-]+)/?$ inhalt.php?ebene1=$1 [NC,L] # process ebene1
RewriteRule ^([A-Za-z0-9-]+)\/([A-Za-z0-9-]+)/?$ inhalt.php?ebene1=$1&ebene2=$2 [NC,L] # process ebene1,2
RewriteRule ^([A-Za-z0-9-]+)\/([A-Za-z0-9-]+)\/([A-Za-z0-9-]+)/?$ inhalt.php?ebene1=$1&ebene2=$2&ebene3=$3 [NC,L] # process ebene1,2,3

意味着必须重写:

<link href="css/acssfile.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/ajsfile.js"></script>
<img src="imgs/animage file.gif" alt="" />

到:

<link href="http://www.oursite.com/css/acssfile.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://www.oursite.com/js/ajsfile.js"></script>
<img src="http://www.oursite.com/imgs/animage file.gif" alt="" />

这总是在语义 URL 中使用正斜杠作为分隔符的结果,还是有办法保留我们的相对路径?

【问题讨论】:

  • “这是否总是在语义 URL 中使用正斜杠作为分隔符的结果” – 这是解析相对 URL 工作方式的“结果”……
  • 当然,您可以尝试通过重写对内部无法找到的资源的请求来解决这个问题——但这意味着服务器需要额外的工作,而且如果从多个不同的“虚拟”目录或深度中引用同一个文件,也会“破坏”缓存……因此使用/ 引用域根是最简单的方法。 (如果保持这种“动态”,以便整个项目可以随意移动到子目录是一个问题,那么使用一个常量作为基本路径并在每个相对 URL 前面加上该服务器端的前缀将是一种方式去。)

标签: html url mod-rewrite


【解决方案1】:

浏览器正在解析那些相对于它所在的 URL 包含的 CSS。如果您的 URL 从 inhalt.php 更改为 foobar/,则浏览器现在位于不同的路径中。在/inhalt.php 上时,相对路径css/acssfile.css 解析为/css/acssfile.css。但是,当它位于 /foobar/ 时,该相对路径将解析为 /foobar/css/acssfile.css

使用绝对路径是个好主意,但不要使用包含域的绝对 URL。因此,将您的资产文件链接为:

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

【讨论】:

  • 感谢您的明确答复!出于某种原因,使用 会使 css 文件无法访问。
  • @Richard 只要你在www.oursite.com域上,href="http://www.oursite.com/css/acssfile.css"href="/css/acssfile.css"之间应该没有区别。
  • 这是否意味着所有使用正斜杠的标准语义 URL 都必须使用绝对路径,或者是否有 mod_rewrite 解决方案?
  • @Richard 没有“必须”。这只是使用相对路径与绝对路径的问题,这是您是否使用 mod_rewrite 的相关决定。绝对路径通常是首选,因为相对路径可能很脆弱(根据您的经验)。
【解决方案2】:

您可能会保留相对于站点根目录的资源路径:/css/acssfile.css,这样您就不必关心正在显示的实际页面的路径...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2011-11-13
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多