0

我必须从一个域重定向到另一个域。两个域都启用了 http 和 https 协议。因此,为了映射 http 和 https,我在 conf 文件中尝试了各种组合,如下所示:#RewriteCond %{HTTPS} =on #RewriteCond %{SERVER_PORT} ^443$ #RewriteRule ^(.+)$ - [env=askapache: HTTPS]

#RewriteCond %{HTTPS} !=on
#RewriteRule ^(.+)$ - [env=askapache:http]
RewriteCond %{SERVER_PORT}s ^(443(s)|[0-9]+s)$
RewriteRule ^(.+)$ - [env=askapache:%2]

RewriteCond %{HTTP_HOST} ^([www.]+)?test-redirect\.com$ [NC]  
RewriteRule  ^(.*)$ http%{ENV:askapache}//amit.test.com/content/test/category/6  [L]

#RewriteCond %{HTTP_HOST} ^([www.]+)?test-redirect\.com$ [NC]  <BR> 
#RewriteCond %{HTTPS} !on
#RewriteRule .? http://amit.test.com/content/test/category/6 [L]`

但是每次都跳过/忽略 https 条件。也没有任何重写日志。我在网上看到了很多例子。但不明白为什么它没有检测到 https?http 在哪里工作得很好。

4

1 回答 1

0
  • 重写日志很可能位于 https 和 http 的 2 个不同位置。您可以尝试使用HTTP_AA而不是使用“askapache”作为环境名称。前缀 HTTP_ANYTHING 是确保 var 可用的更安全的方法,因为某些设置不允许自定义 var 以 HTTP_ 以外的任何内容开头,因为它通常代表 HTTP 标头,因此它们必须允许。

  • 确保您的 https 端口实际上是 443,否则您将需要更改代码。

  • block通过在此处尝试第一种和第二种方法来确保您的代码的 mod_rewrite工作:甚至较新的 HTTP/HTTPS 重写代码如果使用第一个示例不起作用,您需要首先使用该规则使其工作。

  • 尝试HTTP_AA使用 SetEnvIfNoCase 指令或使用在重写代码上方设置 var

    SetEnv HTTP_AA

  • 验证 SSL 和非 SSL 的 vhost/httpd.conf 设置,例如文档根目录和 Options 和 AllowOverrides、Logs 以及 SSLOptions 的 StdEnvVars。

  • mod_includes使用它构建一个 shtml 文件printenv。然后查看 ssl 和非 ssl 输出,并特别注意带有前缀REDIRECT_的 var,显然要确保HTTP_AAvar 在输出中正确显示printenv。或者,您可以使用askapache 站点上的printenv cgi 脚本或 shtml 示例。

  • 不要忘记http://httpd.apache.org/

或者试试这个

    Options +FollowSymLinks +ExecCGI

    # Set var now to try to try to have it availabe for mod_rewrite
    SetEnv HTTP_AA

    RewriteEngine On
    RewriteBase /

    # HTTP_AA is set to either s or is blank
    RewriteCond %{SERVER_PORT}s ^(443(s)|[0-9]+s)$
    RewriteRule ^(.+)$ - [env=HTTP_AA:%2]

    # if host not new domain, its old so redirect both http/https to new
    RewriteCond %{HTTP_HOST} !^amit\.example\.com$ [NC]
    RewriteRule  .* http%{ENV:HTTP_AA}://amit.example.com/content/test/category/6  [R=301,L]
于 2012-06-21T19:07:55.860 回答