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

时间:2016-03-15 23:57:38

标签: javascript html redirect

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

RewriteEngine On

RewriteBase /

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

以上代码的作用是,只需将任何网址段作为参数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之后获取所有内容并将捕获的字符串作为参数传递给base中的index.php。 [NC,QSA,L]是传递给重写规则的标志。 NC用于非大小写敏感,QSA用于附加其他查询字符串,L用于在执行时跳过下面的其他规则。