首页 > 解决方案 > UrlSearchParams.get() 不适用于重写的 url

问题描述

在我的网站上,我重写了我所有的网址。但是现在我已经开始使用 AJAX 来实现投票功能(它是一个问答社区),存在一些问题:

我存储new UrlSearchParams(window.location.search)在一个常数中。然后我为此调用.get()方法。但是,由于 url 被重写,它无法识别查询。

const myParam = urlParams.get('id');

网址www.example.com/Questions/7改写自www.example.com/pages/question.php?id=7

我的 .htaccess 文件如下所示:

RewriteEngine On    # Turn on the rewriting engine
Options -MultiViews
RewriteRule ^$ /pages/index.php [L]
RewriteRule    ^users/([0-9]+)$    pages/profile.php?id=$1   [NC]    # Handle users
RewriteRule    ^questions/([0-9]+)$    pages/question.php?id=$1   [NC]    # Handle questions
RewriteRule    ^([A-Za-z_]+)$       pages/$1.php                    [NC]    # Handle pages
RewriteRule    ^([A-Za-z_]+)$       pages/$1.html                    [NC]    # Handle pages

当 url 被重写时,如何克服 UrlSearchParams 无法识别查询字符串数据的事实?

标签: javascriptquery-stringquerystringparameter

解决方案


您的重写规则所有内部重写,这意味着客户端代码只能看到原始 URL,即/Questions/7.

由于您的 PHP 在服务器端运行并且可以看到重写的查询参数,因此您可以直接将它们作为 JS 变量注入,供您的客户端代码使用。

例如,把它放在你的<head>部分......

<script>
const ID_PARAM = <?= json_encode($_GET['id'] ?? null) ?>;
</script>

推荐阅读