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/

相关文章:

使用 javascript 进行 PHP 表单验证

javascript - react native : How to apply ListView's contentContainerStyle to renderRow() to create grid while having renderHeader()?

javascript - 是什么导致我在 Firefox 开发者控制台中看到语法错误?

php - 如何使用 Doctrine 或 Mysql 更新添加/替换整个数据库

php - Google BigQuery 与 PHP 集成

javascript - 为悬停时显示隐藏跨度的按钮创建平滑过渡

c# - 重定向到 URL,IE 8 忽略片段

javascript - 渲染 html 页面/# :id using flask

html - 是否可以在 CSS 中定位 "no target"?

php - 启用 apache ssl 模块后 Wamp 图标变成橙色,未安装 skype