0

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

1 回答 1

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.comRewriteRule%{HTTP_HOST}example.comwww.example.com

于 2013-07-05T20:43:05.057 回答