php - 无法将 https 站点重定向到另一个 url - nginx 服务器 block

标签 php redirect nginx

我正在尝试将一个促销子域附加到我已经在 https 上的网站,然后使用重定向 URL 重定向到该网站中的另一个页面。例如,基本上如果我的网站是 https://example.com 并且有一个页面 https://example.com/xyz/xyz/promo 那么我想要当我在此页面输入 https://promo.example.com 时浏览器重定向。我已经设置了所有相关的 AWS route 53 设置。

我的 nginx 服务器 block 有这个

   server {                                                                                                                                                                             
            listen 80 default_server;
            listen [::]:80 default_server;
        return 301 https://example.com$request_uri;
    }

    server {
            server_name www.example.com;
            return 301 https://example.com$request_uri;
    }

    server {
        server_name example.com;
        return 301 https://example.com$request_uri;
    }

    server {
        server_name promo.example.com;
        return 301 https://example.com/xyz/xyz/promo;
    }
ssl_certificate /..path/..;
ssl_certificate_key //..path/..;
ssl_dhparam /..path/...;
ssl_trusted_certificate /..path/..;

add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
ssl_prefer_server_ciphers on;
ssl_ciphers .......; //hidden
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_session_cache   shared:SSL:10m;
ssl_session_timeout 10m;
ssl_buffer_size 1400;
spdy_headers_comp 0;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=86400;
resolver_timeout 10;

server {
    listen 443 ssl spdy;
    server_name example.com;
    include /etc/nginx/helper.conf;
    root /var/www/example/  ;
    index index.php index.html;
    charset utf-8;

    location / {
            add_header "Access-Control-Allow-Origin" "*";
            try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

    location ~ /\.ht {
            deny all;
    }
} 

当前行为:

当我直接输入 promo.example.com 而没有 https 时,它会正确重定向。但是如果我输入 https://promo.example.com 它只会显示 example.com,url 是 https://promo.example.com

预期行为:

如果我输入 https://promo.example.com,它应该重定向到 https://example.com/xyz/xyz/promo/p>

我无法放置 https://promo.example.com 然后使用服务器 block 进行重定向,因为 nginx 会抛出错误。

如何重定向 https://promo.example.comhttps://example.com/xyz/xyz/promo

最佳答案

由于使用了 Strict-Transport-Security header ,浏览器自动提供了 301 重定向,所以这个服务器 block 从未被使用过:

server {
    server_name promo.example.com;
    return 301 https://example.com/xyz/xyz/promo;
}

端口重定向 80->443 发生在浏览器连接到服务器之前,因此 Nginx 始终根据端口 443 提供最新的服务器 block 。这应该可以帮助您:

server {
    listen 443 ssl;
    listen 80;
    server_name promo.example.com;
    return 301 https://example.com/xyz/xyz/promo;
}

关于php - 无法将 https 站点重定向到另一个 url - nginx 服务器 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31877634/

相关文章:

python - 为 Flask 应用程序创建系统服务时如何解决 (code=exited,status=203/Exec)

javascript - HTML/JavaScript/CSS/PHP 代码将宽度 % 更新为以像素为单位的高度

php - 加载代理模块时,Docker 中的 Apache 2.4 httpd 不会启动

php - 添加到 URL 的额外字符

php - 使用 PHP 创建 cookie,但从 javascript 读取时遇到困难

reactjs - 在重定向经过身份验证的用户之前,React 应用程序将显示 "Flash"默认页面

jsp - session ID 定期更改 (nginx/tomcat/mamcached/MSM)

node.js - 为什么容器 IP 和别名之间的交换会导致 AJAX 请求出现差异?

单击具有特定 id 的 div 时 JavaScript 重定向

c# - 无法处理从 HTTP/HTTPS 协议(protocol)到其他不同协议(protocol)的重定向