假设URL为:
www.example.com/?val=1#part2
Run Code Online (Sandbox Code Playgroud)
PHP可以val1使用GET数组读取请求变量.
哈希值是否part2也可读?或者这只是浏览器和JavaScript?
我有一种情况,我想采取以下URL:
/ 1 /约翰
并使用Apache的htaccess文件进行重定向
/page.php?id=1&name=john#john
所以它转到一个名为john的html锚点.
我发现了很多关于转义特殊字符的引用,并添加了[NE]标志,以便重定向忽略#符号,但这些不起作用.例如,添加[NE,R]表示该网址仅作为原始网址显示在浏览器地址中:http://example.com/page.php?id = 1&name = john#john.
可能重复:
PHP可以读取URL的哈希部分吗?
(着名的?)网站mega.co.nz在URL中使用哈希标记链接到加密文件; 哈希标记包含密码后的URL部分,并声称加密发生在客户端.使用javascript进行客户端加密肯定是可行的,但是...不是发送到服务器的URL,因此泄露了服务器本身的密码?
URL看起来像
https://example.com/#!encryptedfilename_password
Run Code Online (Sandbox Code Playgroud) 我正在制作一个倾向于在一个页面中处理所有请求的网站(Ajax).所以我认为我可以捕获每个用户点击一个链接,并检查如果它在我的网站上我做了一些关于JavaScript的事情,比如ajax请求,例如,ELSE它会像往常一样打开链接!
在window.location上做一个手表没有用!而且我不知道是否还有#符号之后的url部分.注意:无论使用Gmail和Facebook做,我猜!他们使用的是这样的:
http://mail.google.com/mail/ #inbox
http://www.facebook.com/home.php #/收件箱/ ?REF = MB
请考虑一下:我喜欢在我的项目中使用jQuery,所以任何使用它的解决方案都是首选.
有任何想法吗?
一些Web应用程序身份验证协议(如WS-Federation和SAML协议,即所谓的"被动"协议,以及显然也是ASP.NET Forms身份验证,请参阅此StackOverflow问题,以及AppEngine,请参阅此GWT错误评论)丢失原始的'URL片段',即#-sign之后的部分.
会发生什么大致如下:在干净的浏览器中(所以没有缓存的信息/ cookie /登录信息)我打开URL(1)http://example.com/myapp/somepage?some=parameter#somewhere.这使浏览器请求(2)http://example.com/myapp/somepage?some=parameter,服务器将我重定向到我的身份提供者(包括身份验证请求中的URL(2)),最终我被重定向回到我来自的地方,即URL(2):这是服务器知道的唯一URL.但是我想去URL(1),并且URL片段('anchor')在此过程中已经丢失,实际上已经是第一步了.
这似乎是这些协议的基本限制,因为服务器根本不会看到URL片段.
我知道根据规范,浏览器从服务器请求(2),当我导航到(1)时,导致这个片段丢失限制SAML协议,WS-Federation等.我的问题是:怎么做我解决这个限制?
显而易见的解决方法是避免URL碎片,如本答案中所述.但是,对于我们的特定Web应用程序并不好,因为我们在单页GWT应用程序中使用可收藏的URL片段,以确保我们的应用程序中的导航不会导致页面重新加载.
我的问题:这种情况还有哪些其他解决方法或标准模式?
(我对GWT + SAML协议解决方案特别感兴趣.)
我正在尝试使用 #fragment 标识符在特定锚点打开本地 html 文件,不幸的是,这似乎被文件处理程序删除了。例如运行
cmd.exe /c rundll32 url.dll,FileProtocolHandler "file://C:\test.html#anchor1"
Run Code Online (Sandbox Code Playgroud)
我的 Windows 应用程序中的系统调用似乎删除了 # 标记中的所有内容(不过,直接粘贴到浏览器中也可以)。使用“%23”转义哈希值也不起作用,因为没有打开任何内容(该文件似乎尚未找到)。
有没有办法通过系统调用在锚点打开本地文件?或者,还有其他方法可以在锚点打开本地 html 文件吗?
在虚拟主机中,我使用CustomLog和mod_log_config来记录HTTP请求:
LogFormat "\"%r\"" custom
Run Code Online (Sandbox Code Playgroud)
问题是,整个查询字符串时,有一个没有被记录#(数字符号)的URL(访问domain.tld/slug/foo^bar#baz的结果"GET /slug/foo%5ebar HTTP/1.1"中#baz省略).
是否有任何理由为什么#URL中的字符只会在字符串中的那个点之前被记录?是否有关于此的文档或解决方法?
uri-fragment ×7
url ×3
http ×2
.htaccess ×1
apache ×1
browser ×1
file ×1
file-uri ×1
gwt ×1
gwt-places ×1
html ×1
httprequest ×1
javascript ×1
jquery ×1
logging ×1
mod-rewrite ×1
saml-2.0 ×1
web ×1