.htaccess允许https非www,强制www仅限http

时间:2011-01-28 08:31:36

标签: apache http .htaccess mod-rewrite https

Paypal订阅遇到问题,在paypal订阅个人资料中保留了旧的https://example.com域名,未经取消和重新订阅就无法更改。

目前我所拥有的是将所有内容强制为http://www.example.com所以http(s)://example.com 301 - > http://www.example.com

这就是我现在所拥有的。

paypal正在尝试向https://example.com/payments/ipn.php提交一些订阅,它正在https上执行301重定向到http://www.example.com,但您在301重定向上丢失了POST数据...

使用下面的代码,https://www.example.com有效,但由于我需要https://example.com才能使Paypal工作,我不确定如何在不重定向到HTTP的情况下允许HTTPS域上的无www主持人(http://www.example.com

我添加了robots.txt重定向以禁止/上https,这可行,因为我不想在谷歌上重复网站。

我希望这一切都有意义。

 RewriteCond %{HTTP_HOST} ^domain\.com
 RewriteCond %{REQUEST_URI} !^(/payments)
 RewriteRule ^ http://www.domain.com%{REQUEST_URI} [L,R=301]

 RewriteCond %{SERVER_PORT} ^443$
 RewriteRule ^robots\.txt$ robots_ssl.txt [L] 

对于任何有兴趣的人来说,这都是固定的.htaccess!

    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^domain\.com
    RewriteRule ^ http://www.domain.com%{REQUEST_URI} [L,R=301]

    RewriteCond %{SERVER_PORT} ^443$
    RewriteRule ^robots\.txt$ robots_ssl.txt [L]
    RewriteRule %{HTTPS_HOST} ^domain\.com%{REQUEST_URI}

1 个答案:

答案 0 :(得分:2)

要过滤HTTPS,您可以使用以下RewriteCond:

RewriteCond %{HTTPS} !=on  # if it's not HTTPS
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

或者你可以避免重定向,当它是POST请求时,POST数据不会丢失:

RewriteCond %{REQUEST_METHOD} !=POST  # if it's not POST
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]