js 能实现全站 301 重定向吗?

2019 年 10 月 14 日
 Giethoorn
上次问 http 跳转到 https 的问题,得到很多站友的回复,原谅我确实有些笨,最后只能采用最简单的 JS 跳转,就是在模板文件中添加 Js
<script type="text/javascript">
var url = window.location.href;
if (url.indexOf("https") < 0) {
url = url.replace("http:", "https:");
window.location.replace(url);
}
</script>
感谢 xiaodongus 提供的这段 JS 代码,这个添加后,确实能跳转了,但是我通过在线检测,发现带 http 的链接返回码还是 200,而非 301,JS 能不能实现 301 的全站定向呢?关于质疑我做广告的,就请绕道而行吧!
4979 次点击
所在节点    问与答
30 条回复
optional
2019 年 10 月 14 日
在线检测 并不会执行 js。
optional
2019 年 10 月 14 日
301 是服务端的事情,js 跳转是客户端执行的
Giethoorn
2019 年 10 月 14 日
.htaccess 配置如下
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
Giethoorn
2019 年 10 月 14 日
@optional 您要非要较真儿,我就添加上去吧,因为之前添加了之后,返回码不对,所以删掉了
westoy
2019 年 10 月 14 日
问题是没意义啊

全站 HTTPS 就是了防劫持

你先 HTTP 再跳转 HTTPS 本身就会被劫持搞降级攻击
santom
2019 年 10 月 14 日
如果你一定要说 js 的话 服务器跑个 node 然后 redirect?
Giethoorn
2019 年 10 月 14 日
@westoy 那不能让 http 的打不开吧,还是不开 https 的,我现在都蒙了,到底要不要开 https 的,
qinxi
2019 年 10 月 14 日
Hsts
mercury233
2019 年 10 月 14 日
@westoy 检查嵌套 iframe,加 hsts,对于网页来说基本能解决劫持问题的吧

@Giethoorn 这不是较真,客户端 js 是不可能给你真正的 301 的
momocraft
2019 年 10 月 14 日
serviceworker 可以假造 301 嗎?
viko16
2019 年 10 月 14 日
没必要自己搞 301,配置 HSTS 和加入 HSTS preload list 就好了
locoz
2019 年 10 月 14 日
js 不能实现,但是你可以在反代层实现( CDN 提供的全站 HTTPS 就是这么实现的
shansing
2019 年 10 月 14 日
JS 做不了。301 是 HTTP 状态码,JS 改变不了。

@viko16 加入 Preload List 的前提就是需要“redirect”,这里说的重定向肯定不是 JS 这种。
wysnylc
2019 年 10 月 14 日
http->https 有可能被中间人劫持
EridanusSora
2019 年 10 月 14 日
js 可以啊 nodejs
shansing
2019 年 10 月 14 日
@Giethoorn 看到你在用 .htaccess,那么再加入以下代码就能实现 HTTP 301 重定向到 HTTPS 了:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
MaxSupermist
2019 年 10 月 14 日
301 需要服务端输出 Header 信息,你需要的更可能是 301 全站转发,看这个
301chongdingxiang.mfpad.com
Giethoorn
2019 年 10 月 14 日
@shansing 怎么加入,我刚才把这一行代码加进去,RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]然后全站就不能访问了,搞的我都不敢试了
irainsoft
2019 年 10 月 14 日
不会是在拿生产环境在做测试吧... 本地搞个环境出来解决问题吧,否则畏手畏脚的做不出来啥的
beastk
2019 年 10 月 14 日
js 一般是 200,服务端才能 301

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/609091

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX