使用mod_rewrite.c

时间:2018-07-10 19:15:43

标签: apache mod-rewrite url-redirection

有人可以在上述情况下为我提供帮助吗?

1,http到https

所有访问权限必须更改为https://~

1个主机(www和ex1〜3)中有2个,4个子域

www.example.com,ex1.example.com,ex2.example.com,ex3.example.com

3,没有子域使用URI重定向到www

https://example.com/dir/必须更改为https://www.example.com/dir/

我在/etc/httpd/conf.d/

中有这个rewrite.conf。

现在我将https://example.com/dir/设为https://www.example.com,但对此没有解决方案。

希望有人会帮助我解决这个问题。

  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

  RewriteCond %{HTTP_HOST} !^(www|ex1|ex2|ex3)\.example\.com [NC]
  RewriteCond %{HTTP_HOST} ^example\.com$ 
  RewriteRule ^/(.*)$ https://www.example.com/$1 [R=301,L]

服务器版本:Apache / 2.2.34(Unix), Amazon Linux AMI版本2018.03

1 个答案:

答案 0 :(得分:0)

第一条规则正在作为[Last]处理,没有达到第二条规则将htts://example.com/dir/重定向到www。版。尝试将它们切换:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www|ex1|ex2|ex3)\.example\.com [NC]
RewriteCond %{HTTP_HOST} ^example\.com$ 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

此外,您不能在apache 2中使用前面的斜杠。您应该像上面一样删除它,或者如果曾经使用过apache 1,则可以选择匹配它:

RewriteRule ^/?(.*)$ https://www.example.com/$1 [R,L]

此外,我建议制作所有重定向标志[R = 302],直到您确认它们正在起作用以防止在重定向上缓存问题。