如何通过DNS将https与php POST转发到其他域?

时间:2013-07-28 05:04:07

标签: apache redirect mod-rewrite dns

我正在更新当前使用HTTPS的域名,并且拥有许多用户每天都要连接的API。

我需要做的是,基本上将通过DNS /新服务器的所有流量重新路由到新域名。

EG

目前用户正在点击:https://olddomain.com/api我们现在正在使用https://newdomain.com/api所以我需要将https://olddomain.com/api的所有来电重定向,并将php POST数据保持原样https://newdomain.com/api < / p>

CNAME似乎没有使用帖子数据重定向它,并且它无法通过API调用。一些CNAME用于指向newdomain.com的olddomain.com,其中apache2 mod重写应该处理重定向,如果你导航到olddomain.com它会转发到newdomain.com但是POST数据不适用于某些原因。新服务器具有旧的和新的域SSL证书,因此应该有效。

这是我的000-default在/ etc / apache2 / sites-enabled / 000-default

中的样子
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName newdomain.com
    ServerAlias newdomain.com

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^olddomain.com
    RewriteRule ^/(.*)$ https://newdomain.com/$1 [L,R=301]
    RewriteCond %{HTTP_HOST} ^www.olddomain.com
    RewriteRule ^/(.*)$ https://newdomain.com/$1 [L,R=301]

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride ALL
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride ALL
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>
</VirtualHost>


<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName newdomain.com
        SSLEngine on
        SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
        SSLCertificateFile /etc/apache2/ssl/certs/newdomain.com.crt
        SSLCertificateKeyFile /etc/apache2/ssl/private/newdomain.key
        SSLCertificateChainFile /etc/apache2/ssl/ssl_bundle.crt
        DocumentRoot /var/www/
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName olddomain.com
        ServerAlias www.olddomain.com
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^olddomain.com
        RewriteRule ^/(.*)$ https://newdomain.com/$1 [L,R=301]
        RewriteCond %{HTTP_HOST} ^www.olddomain.com
        RewriteRule ^/(.*)$ https://newdomain.com/$1 [L,R=301]

        SSLEngine on
        SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
        SSLCertificateFile /etc/apache2/ssl/certs/olddomain.com.crt
        SSLCertificateKeyFile /etc/apache2/ssl/private/olddomain.key
        SSLCertificateChainFile /etc/apache2/ssl/ssl_bundle.crt
        DocumentRoot /var/www/
</VirtualHost>

1 个答案:

答案 0 :(得分:0)

您是否尝试使用HTTP状态307(临时重定向)而不是301?根据{{​​3}},此方法将允许您保留重定向请求的原始HTTP方法(以及因此在POST情况下的关联主体),尽管标准还要求用户代理要求确认用户是非GET和非HEAD的。

例如,在Apache配置文件中,尝试替换如下行:

RewriteRule ^ /(。*)$ W3C's HTTP/1.1 Status Codes Definitions $ 1 [L,R = 301]

由:

RewriteRule ^ /(。*)$ https://newdomain.com/ $ 1 [L,R = 307]

请注意,已报告某些用户代理不符合有关HTTP 307状态的标准(例如,不要求用户确认),而其他一些用户代理根本不理解它。因此,如果您选择使用此方法并在需要时查找回退机制,我建议您使用您定位的浏览器仔细测试它。