我正在尝试重定向,但失败了,出于某种原因,我今天无法思考。我在 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
答案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
。
如果您仍然不确定问题所在,请编辑您的问题并发布重写日志的相关部分。