将使用 history.pushState() 创建的 URL 重定向到基本 URL

Redirect URL created with history.pushState() to base URL

本文关键字:URL 重定向 创建 history pushState      更新时间:2023-09-26

我正在使用带有history.pushState()的javascript来创建单页标签系统(http://s.codepen.io/CKH4/debug/XdNoxX/)。是否有可能获得使用history.pushState()创建的虚假网址并将其重定向到主页。

如果我的基本网址是"example.com",而虚假网址是"example.com/about",我希望任何导航到"example.com/about"的用户都被重定向到"example.com"。

我假设没有办法在普通 JS 中做到这一点(如果有的话)。正确的方法是什么?

就像@nemoinho在他的回答中所说的那样,你可以从服务器端实现你的目标。例如,如果您的服务器支持 .htaccess 重写规则,并且您使用的是 php,那么您可以对 .htaccess 文件使用以下代码并将其保存在根文件夹中:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?u=$1 [NC,QSA,L]

上面的代码所做的是,只需将任何 url 段作为参数u传输到 index.php ,以便您可以在呈现页面之前检查$_GET['u']并确定要做什么。

例如:https://example.com/test/rest => https://example.com/index.php?u=test/rest

阐述:

第一行将告诉服务器启动重写引擎。

第二行将基目录重写为根目录。这意味着无论您的网址 https://example.com/test/rest 如何,它都会将您的基础重写为 https://example.com/。

第三行是检查请求的 url 是否实际上不是物理文件的条件。

仅当第三行有效时,才会执行最后一行,它所做的是获取 base 之后的所有内容,并将捕获的字符串作为参数传递给 index.php in 您的 base。[NC, QSA, L] 是传递以重写规则的标志。NC 表示不区分大小写,QSA 用于附加其他查询字符串,L 用于在执行时跳过下面的其他规则。

这是不可能的,但您可以将您的网络服务器配置为处理所有请求,就像它们调用主页一样,例如通过提供同一页面或通过 302 重定向。