V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Giethoorn
V2EX  ›  问与答

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

  •  
  •   Giethoorn · 2019-10-14 11:36:52 +08:00 · 4337 次点击
    这是一个创建于 1900 天前的主题,其中的信息可能已经有所发展或是发生改变。
    上次问 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   ·   实用小工具   ·   5854 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:21 · PVG 10:21 · LAX 18:21 · JFK 21:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.