我们对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 的 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/acssfile.css
,这样您就不必关心显示的实际页面的路径...