我以前在网上浏览过此内容,但我怀疑答案是“您做不到”,但是由于我尚未找到确定的答案,因此我认为值得在这里提出。我发现与该问题最接近的是The mystery of the trailing slash and the relative url(当前已关闭,但Google拥有a text-only cached version)。
由于URL的传统设计是将带有斜杠的URL解释为目录,而将不带斜杠的URL解释为文件资源,并且相对URL不在目录中,则如果当前页面的路径为
/lorem/ipsum/dolor
相对路径
not-dolor
将解析为
/lorem/ipsum/not-dolor
当将
/lorem/ipsum/dolor
视为位于目录dolor
中的文件资源/lorem/ipsum/
时,这自然很有意义;典型的,直观的约定。但是,由于大量网站现在是动态应用程序,而每个URL都没有文件系统映射,因此这可能会引起麻烦,因为有时您确实想相对于路径工作,就像在当前设计中出现了斜杠一样。是否有任何合理的方式(“不涉及服务器端处理/变量/其他或JavaScript”)使用基于当前路径的相对路径,而不是基于当前路径的“目录”?这样
not-dolor
可以相对于/lorem/ipsum/dolor
产生/lorem/ipsum/dolor/not-dolor
我没有涉及类似
./not-dolor
之类的解决方法,因为.
仍然是(/lorem/)ipsum/
。缺少重定向到尾部斜杠并确保所有资源都具有与目录式和文件式性质相对应的URL或修改spec(!)的方法,有没有办法解决这个问题? 最佳答案
没有。
问题与导演/文件映射关系不大(从未想到映射方式会如何发生,只允许作为方便的映射,而这通常还是很方便的)。
它与dolor
与dolor/
不同的简单事实有关,您希望在结合到以dolor/
结尾的引用时,从相对于dolor
的引用中提供新的URI。
解决方案是始终使用/lorem/ipsum/dolor/
。也就是说,从不谈论/lorem/ipsum/dolor
,仅谈论/lorem/ipsum/dolor/
。毕竟,正如您所说,由于目录/文件映射不是唯一的处理方式,因此没有理由为什么您的资源名称不总是以斜杠结尾。
确实,无论如何这可能更有意义,因为使用此类相对链接意味着您在/lorem/ipsum/dolor/not-dolor
和/lorem/ipsum/dolor
之间存在某种关系。现在,虽然/lorem/ipsum/dolor/not-dolor
与/lorem/ipsum/dolor/
的关系不大,但暗示它可能存在于URI中(是的URI是不透明的,但是虽然在某些级别上必须将它们视为不透明,但仍可以反射(reflect)它们之间的关系,这正是相对URI引用有意义的原因。因此,可以说/lorem/ipsum/dolor/
可以更清楚地反射(reflect)您的整体URI到资源的映射(如果没有映射,无论如何您都不希望从dolor变为not-dolor)。
现在,这归结为重定向到尾随的斜杠,您说您想避免(或者更好的是,首先不要将某人引导到dolor
),但是它的优点现在似乎比简单的相对URI的便利更好。