我正在尝试将非https强制到网站上的一个文件夹,但其余的都应该是https。这是我的.htaccess代码:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule ^reports$ http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([0-9a-zA-Z].+)$ /page.php?title=$1 [L]
ErrorDocument 404 404.php
答案 0 :(得分:0)
我猜您遇到的问题是,甚至报告文件夹也被强制为https。是吗?
那就是,因为你把这个规则放在第一位。一般规则顺序应该是:最具体的第一个,最常见的最后一个。因此,您的常规https强制规则应该是最后一个。或者至少它必须在您的http强制规则之后。
此外,您只强制/报告/到http。该目录中的所有内容都将再次为https。我认为你应该把它改成
RewriteCond %{REQUEST_URI} ^/reports/(.*)$ [NC]
RewriteRule ^(.*)$ http://yourdomain.com/$1 [R=301,L]
如果我看得正确,你强制执行一切不以www开头。将该规则放在reports-http规则之后,并将其更改为https。这将为您节省一次重定向。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
比你的https-enforce规则,而不是重写到page.php,如果不是现有的文件或目录。