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

2019-10-14 11:36:52 +08:00
 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 的全站定向呢?关于质疑我做广告的,就请绕道而行吧!
4098 次点击
所在节点    问与答
30 条回复
optional
2019-10-14 11:38:22 +08:00
在线检测 并不会执行 js。
optional
2019-10-14 11:38:49 +08:00
301 是服务端的事情,js 跳转是客户端执行的
Giethoorn
2019-10-14 11:41:39 +08:00
.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 11:43:01 +08:00
@optional 您要非要较真儿,我就添加上去吧,因为之前添加了之后,返回码不对,所以删掉了
westoy
2019-10-14 11:43:26 +08:00
问题是没意义啊

全站 HTTPS 就是了防劫持

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

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

@viko16 加入 Preload List 的前提就是需要“redirect”,这里说的重定向肯定不是 JS 这种。
wysnylc
2019-10-14 12:09:44 +08:00
http->https 有可能被中间人劫持
EridanusSora
2019-10-14 12:10:33 +08:00
js 可以啊 nodejs
shansing
2019-10-14 12:11:05 +08:00
@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 12:11:30 +08:00
301 需要服务端输出 Header 信息,你需要的更可能是 301 全站转发,看这个
301chongdingxiang.mfpad.com
Giethoorn
2019-10-14 13:01:18 +08:00
@shansing 怎么加入,我刚才把这一行代码加进去,RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]然后全站就不能访问了,搞的我都不敢试了
irainsoft
2019-10-14 14:35:12 +08:00
不会是在拿生产环境在做测试吧... 本地搞个环境出来解决问题吧,否则畏手畏脚的做不出来啥的
beastk
2019-10-14 14:46:29 +08:00
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