我知道有多个帖子,但我无法用其他答案解决。
我确实尝试过:htaccess force www and remove index.php和.htaccess force HTTPS但没有成功。
我的网站有一个执行路由器的index.php。所以链接" / about"实际上是从index.php管理的(要在链接中删除)。
这是我目前的htaccess:
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteCond %{HTTP_HOST} !=localhost [NC]
RewriteCond %{HTTP_HOST} !=127.0.0.1
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ %{HTTP_HOST}/$1/ [R=301,L]
</IfModule>
它对index.php非常有效(实际上它会删除index.php并重写URL)。
它可以从example.com
重写为https://www.example.com
(,这没关系,我想要这个!)。但是没有从 http://www.example.com 重写为 https://www.example.com。
例如,链接为&#34; http://www.example.com/this/is/a/not/link/secure&#34;保持原样。 但我希望重定向到&#34; https://www.example.com/this/is/a/not/link/secure&#34;
非常感谢。
编辑:根据anubhava的回答,这是新的整个htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L,QSA]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?!localhost$|127\.0\.0\.1$)(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{THE_REQUEST} /index.php [NC]
RewriteRule ^(.*)index\.php$ /$1/ [R=301,L,NC,NE]
现在用双域重写http://www.example.com/apiv2/member-card?id=12
中的https://www.example.com/www.example.com//?id=12
.....
与在http://example.com/apiv2/member-card?id=12
https://www.example.com/www.example.com//?id=12
相同
答案 0 :(得分:0)
您的第一条规则需要[OR]
子句来重定向这两个条件:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?!localhost$|127\.0\.0\.1$)(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{THE_REQUEST} /index.php [NC]
RewriteRule ^(.*)index\.php$ /$1/ [R=301,L,NC,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
确保在测试此更改之前清除浏览器缓存。