我的网站配置为自动重定向到https://www
。
但是,如果我尝试访问子页面,则会收到404错误:
https://www.example.com.br/a-necessidade-de-dar-razao-da-fe/
我的.htaccess
:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pag=$1&busca=$2 [NC,QSA]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
答案 0 :(得分:0)
您有一个错误的RewriteCond
指令,导致您的前控制器(index.php
)仅在通过HTTP(而非HTTPS)访问站点时被调用,因此尝试在HTTPS自然会产生404。
您的指令顺序也错误。从HTTP到HTTPS(和规范的www)重定向应该首先出现,但是,您还缺少一个OR
标志,因此它永远不会将http://www.example.com
重定向到HTTPS。
请尝试以下操作:
RewriteEngine On
# HTTP to HTTPS and canonical www redirect
RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Front-controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pag=$1&busca=$2 [NC,QSA]
但是,$2
后向引用将始终为空(您仅在正则表达式中捕获单个模式),因此busca
URL参数将始终为空。
这还假定您在使用SSL代理。
在测试之前清除浏览器缓存。