js 能实现全站 301 重定向吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Giethoorn
V2EX    问与答

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

  •  
  •   Giethoorn 2019-10-14 11:36:52 +08:00 4680 次点击
    这是一个创建于 2188 天前的主题,其中的信息可能已经有所发展或是发生改变。
    上次问 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 的全站定向呢?关于质疑我做广告的,就请绕道而行吧!
    30 条回复    2021-06-28 11:01:14 +08:00
    optional
        1
    optional  
       2019-10-14 11:38:22 +08:00
    在线检测 并不会执行 js。
    optional
        2
    optional  
       2019-10-14 11:38:49 +08:00
    301 是服务端的事情,js 跳转是客户端执行的
    Giethoorn
        3
    Giethoorn  
    OP
       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
        4
    Giethoorn  
    OP
       2019-10-14 11:43:01 +08:00
    @optional 您要非要较真儿,我就添加上去吧,因为之前添加了之后,返回码不对,所以删掉了
    westoy
        5
    westoy  
       2019-10-14 11:43:26 +08:00
    问题是没意义啊

    全站 HTTPS 就是了防劫持

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

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

    @viko16 加入 Preload List 的前提就是需要“redirect”,这里说的重定向肯定不是 JS 这种。
    wysnylc
        14
    wysnylc  
       2019-10-14 12:09:44 +08:00
    http->https 有可能被中间人劫持
    EridanusSora
        15
    EridanusSora  
       2019-10-14 12:10:33 +08:00 via Android
    js 可以啊 nodejs
    shansing
        16
    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
        17
    MaxSupermist  
       2019-10-14 12:11:30 +08:00
    301 需要服务端输出 Header 信息,你需要的更可能是 301 全站转发,看这个
    301chongdingxiang.mfpad.com
    Giethoorn
        18
    Giethoorn  
    OP
       2019-10-14 13:01:18 +08:00
    @shansing 怎么加入,我刚才把这一行代码加进去,RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]然后全站就不能访问了,搞的我都不敢试了
    irainsoft
        19
    irainsoft  
       2019-10-14 14:35:12 +08:00
    不会是在拿生产环境在做测试吧... 本地搞个环境出来解决问题吧,否则畏手畏脚的做不出来啥的
    beastk
        20
    beastk  
       2019-10-14 14:46:29 +08:00 via iPhone
    js 一般是 200,服务端才能 301
    tomczhen
        21
    tomczhen  
       2019-10-14 14:48:02 +08:00 via Android
    明明花点钱昨天说不定就搞完了,非要发两个帖子,折腾好几次,还在那里折腾。
    b821025551b
        22
    b821025551b  
       2019-10-14 15:07:20 +08:00
    让老板花点钱请个专业的,你基本原理都不懂,这么在线上环境折腾 2 天谁能受得了。
    shansing
        23
    shansing  
       2019-10-14 15:48:09 +08:00
    @Giethoorn 你为什么只加一行呢……
    Giethoorn
        24
    Giethoorn  
    OP
       2019-10-14 16:11:00 +08:00
    @tomczhen 在哪找人,我自己花钱都弄好,唉,公司没有技术,网建服务差的要死,我能怎么办,我也很绝望啊
    treblex
        25
    treblex  
       2019-10-14 18:40:39 +08:00
    服务端开强制 https 不行吗
    just1
        26
    just1  
       2019-10-14 18:42:57 +08:00
    1,2 楼给了你正确回答你偏说人家较真,那大家真的不知道怎么办了
    Giethoorn
        27
    Giethoorn  
    OP
       2019-10-15 09:01:37 +08:00
    @suke971219 可以,现在的情况是带 http 的,和 https 的都能访问,需要做 http 的 301 定向到 https 上去
    shangyes
        28
    shangyes  
       2019-10-15 09:15:28 +08:00
    HSTS 强制 https 访问,或者服务端 Nginx 或者 Apache 设置 rewrite
    Giethoorn
        29
    Giethoorn  
    OP
       2019-10-15 09:17:45 +08:00
    @shangyes 有没空,接个私单
    xzsljc
        30
    xzsljc  
       2021-06-28 11:01:14 +08:00
    可以 am
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 21:19 PVG 05:19 LAX 14:19 JFK 17:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86