【发布时间】: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