Почему подстраницы не загружают htacess? - PullRequest
0 голосов
/ 06 ноября 2018

Мой сайт настроен на автоматическое перенаправление на 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 голосов
/ 06 ноября 2018

У вас есть ошибочная директива RewriteCond, которая приводит к тому, что ваш front-контроллер (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 всегда будет пустой (вы фиксируете только один шаблон в своем регулярном выражении), поэтому параметр URL busca всегда будет пустым.

Это также предполагает, что вы находитесь за SSL-прокси.

Очистите кеш браузера перед тестированием.

...