php - 哈希片段与服务器端代码冲突

标签 php javascript fragment-identifier

我有一个网站,用户可以在其中选择一系列字母和数字,然后根据这些字母和数字将他们带到一个新页面。

因此可能会将它们带到 /cds/C_1_3_A_2

cds 目录中没有实际的C_1_3_A_2 页面,我有一个重写规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cds/(.*) /cds/index.html [L]

因此,如果请求的文件不存在,它将被重写为 index.html,其中 php 脚本获取 URL 的最后一个组件 (C_1_3_A_2)并加载相关内容,如果 URL 的最后一个组件是 /cds,则 PHP 脚本重定向到 /cds/C_1_1_A_1

但是我想添加 AJAX 使其更流畅,这意味着我需要添加对哈希片段的支持,因为旧浏览器不支持 history.pushState。

所以如果用户自己去/cds/#C_1_3_A_2,它应该和/cds/C_1_3_A_2一样

但由于片段没有发送到服务器,用户最终以 /cds/C_1_1_A_1#C_1_3_A_2 结束,并获取与 C_1_1_A_1 相关的内容,不是他们想要的C_1_3_A_2

由于 PHP 是服务器端,它在 Javascript 可以处理片段之前执行,我不希望用户被 ​​PHP 脚本重定向然后由 javascript 返回。

那么如何添加对散列片段的支持呢?其他网站如何处理这个问题?

最佳答案

如果您查看带有散列的页面请求的 header ,散列部分甚至不会发送到网络服务器。因此,php 或 apache 都不知道哈希是否存在。如果没有“最后一个组件”,您最好只加载索引页面而不是重定向,然后通过 javascript 将默认值设置到哈希中。

关于php - 哈希片段与服务器端代码冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12610987/

相关文章:

php - PDO 为 foreach() 提供的参数无效

javascript - 当使用放大镜 js 更改 src 时如何刷新 img src?

javascript - 事件未使用函数绑定(bind)定义

javascript - 当我重新加载禁用时,使用 angularjs 禁用 ng-repeat 按钮不起作用?

syntax - RDFa 中井号/井号的完整含义

javascript - 从 URL 检索哈希值

redirect - URL 片段和 302 重定向

php - 从 mySQL 读取 float

php - 我做了分页,但它不能限制每页的帖子 Codeigniter

php - Instanceof 和命名空间