为什么子页面无法加载htacess?

时间:2018-11-06 13:01:41

标签: .htaccess mod-rewrite

我的网站配置为自动重定向到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]

1 个答案:

答案 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代理。

在测试之前清除浏览器缓存。