我有一个httpd-vhosts重写规则,用于将任何端口80流量转发到端口443 URL:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.example.com/dir/subdir$1 [L,R]
当最终用户首先导航到端口80时,此工作正常。但是,导航到端口443的最终用户不会处理重写规则,因为它不在httpd-ssl配置文件中。
包含httpd-ssl重写条件的正确方法是什么,以便如果URL尚未重写,我可以重写它?
我尝试了各种选项,最后一次httpd-ssl重写尝试如下:
RewriteCond %{DOCUMENT_ROOT} !^/dir/subdir$
RewriteRule ^/(.*) /dir/subdir$1
答案 0 :(得分:0)
重定向到SSL的需要将要求您有两个重写规则,因此可能有两个重定向访问者。您无法轻松强制SSL并在一个规则中执行重定向。
建议使用%{HTTPS}
而不是检查端口,因为它允许您使用备用端口,如80或8443,如果有必要的话。
RewriteEngine On
# First force SSL:
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]
# Then redirect all requests not already in dir/subdir into that path
RewriteCond %{REQUEST_URI} !^/dir/subdir
RewriteRule (.*) https://%{HTTP_HOST}/dir/subdir/$1 [L,R=301]
如果您需要强制所有用户加入www.example.com
,请在上面的%{HTTP_HOST}
中将www.example.com
替换为RewriteRule
。使用%{HTTP_HOST}
将允许域保留在用户请求的任何内容上,例如example.com
代替www.example.com
。