我有以下网址重写类似于
RewriteRule ^event/([0-9]+)/$ page1.php?title=$1 [NC,L]
RewriteRule ^view/([0-9]+)/$ page2.php?id=$1 [NC,L]
当我转到domain.com/app/event/3/
时,它会转到正确的网址。
在此页面中,我有一个JavaScript,其中包含以下onclick
事件
location.href = "view/5/";
在所有浏览器中,这翻译为domain.com/app/view/5/
。但在IE中(8个和9个)最终都是domain.com/app/event/3/view/5/
它似乎只是附加到上一个网址。
答案 0 :(得分:1)
href
中的相对路径应该被解释为相对于当前路径,因为标记不知道服务器端的结构如何,除非你告诉它。
问题你在Chrome中也遇到过这样的问题。如果您希望根据基本路径解析相对网址,则需要从href
开始提供,或者通过<base>
中的<head>
标记提供:
<!DOCTYPE html>
<html>
<head>
<base href="/app/" />
</head>
<body>
<?php var_dump($_GET); ?>
<ul>
<li><a href="event/7">Foo</a></li>
<li><a href="event/6">Bar</a></li>
</ul>
</body>
</html>
以上内容将按预期工作,因为我们已指示浏览器根据href
部分中<base>
元素的<head>
解析任何相对路径。如果您不这样做,浏览器应该解析相对于当前路径的任何href
的相对<a>
。
特别注意有关relative-urls的规范的this portion:
用户代理必须根据以下优先级(最高优先级到最低优先级)计算基URI:
- 基本URI由BASE元素设置。
- 基本URI由协议交互期间发现的元数据提供,例如HTTP标头(参见[RFC2616])。
- 默认情况下,基本URI是当前文档的基本URI 。并非所有HTML文档都具有基URI(例如,有效的HTML文档可能出现在电子邮件中,并且可能不是由URI指定的)。如果这些HTML文档包含相对URI并依赖于默认基URI,则认为这些HTML文档是错误的。 (重点补充)
醇>
再次,如果您希望看到相对href
值解析为您的基本网址,您需要在链接本身或通过<base>
元素提供该基础,就像我在上面的例子。
我想回到这个问题并记录一些可能与之相关的其他事项。访问锚点的href
属性的各种方法会返回不同的结果。
请考虑以下事项:
var anchor = document.createElement("a");
anchor.setAttribute("href", "foo.php?fizz=buzz");
console.log( "href: " + anchor.href );
console.log( "getAttribute: " + anchor.getAttribute("href") );
以下是我们针对各种版本的Internet Explorer看到的输出:
Internet Explorer 6 - 7 :
href: foo.php?fizz=buzz
getAttribute: foo.php?fizz=buzz
Internet Explorer 8 - 10 :
href: http://fiddle.jshell.net/_display/foo.php?fizz=buzz
getAttribute: foo.php?fizz=buzz
从Internet Explorer 8开始,.href
属性会根据当前文档位置自动解析完整URI,并将锚点href
值附加到末尾。这与我们在其他现代浏览器中看到的行为相同。
出于这个原因,如果您只需要 href
值,那么使用.getAttribute("href")
代替访问.href
属性是明智的。