将非 www ssl 流量重定向到 www ssl (apache)

将非 www ssl 流量重定向到 www ssl (apache)

我正在尝试重定向,但失败了,出于某种原因,我今天无法思考。我在 HTTPD 中有一个 vHost 文件,它监听标准端口 80 和端口 443。我试图重定向https://domain.com/(。*) 到https://www.domain.com/$1 以便 URL 保持完整。

我的配置如下:

服务器名称 www.domain.com
服务器别名 tempdomain.testdomain.co.uk
服务器别名 domain.com

我正在使用的重写规则是。

RewriteCond %{HTTP_HOST} ^domain\.com$
RewriteRule ^(.*)$https://www.domain.com1 美元 [右=301,左]

我也尝试过删除 \. 和 $ 但没有任何效果。当我访问该网址时https://domain.com/secure.page?action=comp它不会重定向到https://www.domain.com/secure.page?action=comp 我也有其他 SSL 页面,以上只是一个例子。

谁能指出我的愚蠢?

答案1

我看不出你的重写规则有什么问题。你确定吗:

RewriteEngine on 

已指定并且此配置肯定会被执行?它在 .htaccess 文件中吗?

尝试设置重写日志它可能会有所帮助:

http://www.latenightpc.com/blog/archives/2007/09/05/a-couple-ways-to-debug-mod_rewrite

答案2

除了使用重写之外,请启用 HTTP 严格传输安全。这很简单,并且有助于防御针对访问者的中间人攻击。

# load module (example using [RHEL])
LoadModule headers_module modules/mod_headers.so

# Use HTTP Strict Transport Security to force client to use secure connections only
Header set Strict-Transport-Security "max-age=86400"
Header append Strict-Transport-Security includeSubDomains

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security

答案3

这就是你所需要的

RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ https://www.domain.com$1 [R=permanent,L]

这条规则在 Apache 2.2 中确实有效

答案4

尝试启用 RewriteLog 并查看是否显示错误。在您的httpd.conf文件(或<VirtualHost>指令)中添加以下内容:

RewriteLog "/path/to/some/file.log"
RewriteLogLevel 9

不要这样继续下去! RewriteLogLevel 9非常速度很慢,因此不应在生产中使用它,仅用于测试。但请启用它(当然还要重新加载 Apache)并检查日志文件以查看当您访问 时会发生什么https://domain.com/secure.page?action=comp

如果您仍然不确定问题所在,请编辑您的问题并发布重写日志的相关部分。

相关内容