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

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

  •  
  •   Giethoorn · 39 天前 · 1506 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。
    上次问 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 的全站定向呢?关于质疑我做广告的,就请绕道而行吧!
    29 回复  |  直到 2019-10-15 09:17:45 +08:00
        1
    optional   39 天前
    在线检测 并不会执行 js。
        2
    optional   39 天前
    301 是服务端的事情,js 跳转是客户端执行的
        3
    Giethoorn   39 天前
    .htaccess 配置如下
    <IfModule mod_rewrite.c>
    RewriteEngine On

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

    全站 HTTPS 就是了防劫持

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

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

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

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
        17
    MaxSupermist   39 天前
    301 需要服务端输出 Header 信息,你需要的更可能是 301 全站转发,看这个
    301chongdingxiang.mfpad.com
        18
    Giethoorn   39 天前
    @shansing 怎么加入,我刚才把这一行代码加进去,RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]然后全站就不能访问了,搞的我都不敢试了
        19
    irainsoft   39 天前
    不会是在拿生产环境在做测试吧... 本地搞个环境出来解决问题吧,否则畏手畏脚的做不出来啥的
        20
    beastk   39 天前 via iPhone
    js 一般是 200,服务端才能 301
        21
    tomczhen   39 天前 via Android
    明明花点钱昨天说不定就搞完了,非要发两个帖子,折腾好几次,还在那里折腾。
        22
    b821025551b   39 天前
    让老板花点钱请个专业的,你基本原理都不懂,这么在线上环境折腾 2 天谁能受得了。
        23
    shansing   39 天前
    @Giethoorn 你为什么只加一行呢……
        24
    Giethoorn   39 天前
    @tomczhen 在哪找人,我自己花钱都弄好,唉,公司没有技术,网建服务差的要死,我能怎么办,我也很绝望啊
        25
    suke971219   39 天前
    服务端开强制 https 不行吗
        26
    just1   39 天前
    1,2 楼给了你正确回答你偏说人家较真,那大家真的不知道怎么办了
        27
    Giethoorn   38 天前
    @suke971219 可以,现在的情况是带 http 的,和 https 的都能访问,需要做 http 的 301 定向到 https 上去
        28
    shangyes   38 天前
    HSTS 强制 https 访问,或者服务端 Nginx 或者 Apache 设置 rewrite
        29
    Giethoorn   38 天前
    @shangyes 有没空,接个私单
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2351 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 13:24 · PVG 21:24 · LAX 05:24 · JFK 08:24
    ♥ Do have faith in what you're doing.