我有一个网站,用户可以在其中选择一系列字母和数字,然后根据这些字母和数字将他们带到一个新页面。
因此可能会将它们带到 /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/