htaccess RewriteRule到https不能与其他规则一起使用

时间:2016-02-17 09:09:09

标签: apache .htaccess redirect mod-rewrite

我正在尝试在.htaccess中设置一些规则以特定方式工作:

  1. 特定页面重定向:

    RewriteRule "^web/site/mais$" https://www.main.com/front/for-you/insurance/ [R=301,L]
    
  2. 主页重定向

    RewriteRule ^$  https://www.forexample.com.br/for-you/ [R=301,L]
    RewriteRule ^/$  https://www.forexample.com.br/for-you/ [R=301,L]
    
  3. HTTP到HTTPS并将www添加到其余部分(这是不起作用的),我尝试了很多东西:

    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{HTTPS} !^on$ [OR]
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    RewriteCond %{HTTP_HOST} ^www\.
    RewriteCond %{HTTPS} !^on$ [OR]
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
  4. 其他方式我试图忘记www规则(但也不起作用):

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

    我发现结合的唯一方法是将https中的常规wwwhttpd.conf规则以及其他规则写入.htaccess,但这样我得到两个或多个301重定向,SEO的业务不好。

2 个答案:

答案 0 :(得分:2)

您对所有目录是否存在相同的问题,或者只对某些目录有问题?

因为如果你有ProxyPass(如你所说),也许它会直接向你发送重定向到Tomcat,所以在离开ssl.conf之前,你可能需要在ssl.conf中指定规则来读取规则。尝试在ProxyPass

之后写下您写入ssl.conf的最后一个

答案 1 :(得分:1)

如果您想将某些空间页面重定向到https,例如,要重定向:

要 - https://www.example.com/page2.html

您可以尝试以下方法:

 RewriteEngine on
 RewriteCond %{HTTP_HOST} !^www\. [OR]
 RewriteCond %{HTTPS} off
 RewriteRule ^(page|page2)\.html$ https://www.example.com/$1.html [L,R]

如果要将整个站点从http重定向到https,可以使用以下命令:

 RewriteEngine on


 RewriteCond %{HTTP_HOST} !^www\. [OR]
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https://www.example.com/$1 [NC,L,R]