我必须从一个域重定向到另一个域。这两个域都启用了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工作得很好。
答案 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示例。
或试试这个
printenv