首次加载时未通过.htaccess设置Cookie

时间:2020-04-10 12:10:12

标签: javascript .htaccess

我有一个名为/ weblog的目录。

当您首次在浏览器栏中输入网址(即:my-site / weblog)时,应将该目录重定向到index2.html并设置cookie。

这是我的.htaccess的样子:

 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /weblog
 RewriteRule ^(.*)$ /index2.html?title=$1 [CO=title:$1&weblog:.my-site.nl:0:/]
 </IfModule>

这实际上非常有效。首次访问该URL时,它将被重定向到正确的新URL。那里没问题。

但是由于某些原因,您第一次访问网址时未设置cookie:

let cookie = getCookie(); // returns undefined

奇怪的是,重新加载页面后它确实会设置。但是我真的第一次需要Cookie,因为我使用它来加载内容。

可能出什么问题了,我该如何解决?

1 个答案:

答案 0 :(得分:0)

在这里进一步挖掘之后,部分找到了我的答案: Cookie not set until a second refresh

显然,在页面的第一次加载中无法访问Cookie。您需要重新加载才能执行此操作。

解决方法:放弃cookie。

我现在使用.htaccess向URL添加一些参数(例如/index2.html?title=$1)。使用window.location.href,我从浏览器中检索URL,并使用以下参数获取参数:

let url_string = window.location.href;
let url = new URL(url_string);
var title = url.searchParams.get('title');
// do stuff with title

,并在History API中使用它来将网址更改回其原始格式。类似于:history.pushState(data, null, url_string)

它解决了我的问题,但是我不喜欢它在浏览器栏中显示带有参数的url的方式。即使只是一秒钟。

是否可以从.htaccess中“在水下”(对于访问者不可见)检索这些参数?