在https的情况下,Apache RewriteCond被忽略

时间:2012-06-21 13:08:23

标签: apache .htaccess mod-rewrite https

我必须从一个域重定向到另一个域。这两个域都启用了http和https协议。所以为了映射http和https,我在conf文件中尝试了各种组合,如下所示:     #RewriteCond%{HTTPS} =开启     #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工作得很好。

1 个答案:

答案 0 :(得分:0)

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

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

  • 通过在此处尝试第一个和第二个方法,确保您的mod_rewrite block代码正常工作:Even Newer HTTP/HTTPS Rewrite Code如果使用第一个示例无效,则需要使用该方法先统治。

  • 尝试使用SetEnvIfNoCase指令或

    HTTP_AA var设置在重写代码之上

    SetEnv HTTP_AA

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

  • 使用只需mod_includes的{​​{1}}构建一个shtml文件。然后查看ssl和非ssl输出,并特别注意前缀为 printenv 的变量,并且显然确保 REDIRECT_ var在HTTP_AA输出中正确显示。或者您可以在askapache站点上使用printenv cgi脚本或shtml示例。

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

或试试这个

printenv