【问题标题】:.htaccess allow https non www, force www on http only.htaccess 允许 https 非 www,仅在 http 上强制 www
【发布时间】:2011-06-17 02:38:44
【问题描述】:

在使用 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 工作,我不确定如何在 HTTPS 域上允许无 www 而不重定向到 HTTP 主机 (@987654329 @)

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

我希望这一切都有意义。

 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}

【问题讨论】:

  • 我不确定您所说的“HTTPS 域上没有 www”是什么意思
  • 您能告诉我们您为什么要使用不安全协议吗?
  • HTTP RFC 说“如果收到 301 状态代码以响应 GET 或 HEAD 以外的请求,则用户代理不得自动重定向请求”。一般来说,以 301 响应 POST 请求会带来麻烦。
  • 我不想在 https 域上使用 www,但我想在 http 域上强制使用它。至于不安全的协议,我发现网站 etc 在 https 上运行速度很慢,所以我现在决定不使用它。至于 301 重定向,这正是我上面概述的问题......“但是你在 301 重定向上丢失了 POST 数据......”
  • %{HTTPS_HOST} 不存在。

标签: apache http .htaccess mod-rewrite https


【解决方案1】:

要过滤 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]

【讨论】:

  • 嗨弗洛恩!我会试一试并报告,感谢您“回答”这个问题:-)
  • RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^domain\.com RewriteRule ^ domain.me%{REQUEST_URI} [L,R=301] RewriteCond %{SERVER_PORT} ^443$ RewriteRule ^robots\.txt$ robots_ssl.txt [L] RewriteRule %{HTTPS_HOST} ^domain\.com%{REQUEST_URI}
  • 啊!以上是我使用的...我将其添加到 TOP 部分,使其格式正确
  • 编辑了主要问题以包含答案,但 Floern 为我指出了正确的方向......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2013-04-22
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多