Apache重写条件帮助

时间:2013-07-05 18:48:27

标签: apache

我有一个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

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