Internet explorer URL重写问题与IE-导致其附加
我有下面的URL重写类似于Internet explorer URL重写问题与IE-导致其附加,internet-explorer,url,rewrite,Internet Explorer,Url,Rewrite,我有下面的URL重写类似于 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/时,它会转到正确的URL 在这个页面中,我有一个JavaScript,它有以下onclick事件 location.href = "view/5/"; 在所有浏览器
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/
时,它会转到正确的URL
在这个页面中,我有一个JavaScript,它有以下onclick
事件
location.href = "view/5/";
在所有浏览器中,这被翻译为domain.com/app/view/5/
。但在IE(8和9)中,它最终成为domain.com/app/event/3/view/5/
它似乎只是附加到上一个URL。IE的行为与预期一致。
href
中的相对路径应解释为相对于当前路径,因为标记不知道服务器端的结构,除非您告诉它
你遇到的问题也发生在我的Chrome上,这是应该的。如果希望根据基本路径解析相对URL,则需要从一开始就在href
中提供,或者通过
中的
标记提供:
由于我们已指示浏览器根据
部分中
元素的href
解析任何相对路径,因此上述操作将按预期进行。如果您不这样做,浏览器将解析规范中任何关于相对URL的相对href
:
用户代理必须根据以下先决条件(从最高优先级到最低优先级)计算基本URI:
基本URI由基本元素设置
基本URI由协议交互期间发现的元数据给出,例如HTTP头(请参见[RFC2616])
默认情况下,基本URI是当前文档的URI。并非所有HTML文档都有基本URI(例如,有效的HTML文档可能出现在电子邮件中,并且可能不由URI指定)。如果这些HTML文档包含相对URI并依赖于默认的基本URI,则认为它们是错误的。(增加重点)
同样,如果您希望看到相对href
值解析为您的基本url,您需要在链接本身中或通过
元素提供该基本url,就像我在上面的示例中所做的那样
需要考虑的其他事项:
我想回到这个问题,并记录一些其他可能需要考虑的事情。访问锚定的href
属性的各种方法返回不同的结果
考虑以下几点:
var-anchor=document.createElement(“a”);
setAttribute(“href”,“foo.php?fizz=buzz”);
console.log(“href:+anchor.href”);
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
属性。谢谢您的回复。我忘了提到我在标题中有一个基本路径:我已经将问题隔离到javascript。如果我将锚定标记与href一起使用,那么它可以正常工作。但是,如果我有一个jquery click事件,其中location.href被设置为event/2/lang/ar/那么它会转到/event/2/event/2/lang/ar-正如您所看到的,url会附加到以前的url中。这只发生在IE@JesbinBaidya中,您使用的实际
标记是什么;JOnathan,我知道我在使用@JesbinBaidya之类的东西,但是HTML中显示的最终输出是什么?