Назад | Перейти на главную страницу

Почему перенаправления .htaccess работают в http, но не с https?

У меня есть простой файл .htaccess, который отлично работает с http-версией сайта, но не когда я перехожу на https. Зачем?

RewriteEngine on
#This is so if the file exists then use the file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %{REQUEST_FILENAME} [L]

#These conditions check if a file or folder exists just for reference
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#if someone adds ".php" to the slug get rid of it
RewriteRule ^(.*)\.php$ $1  

#don't add the [R] here because we don't want it to redirect
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]

Здесь недостаточно информации на 100%, но при обычной настройке SSL по умолчанию (например, Red Hat / CentOS / Fedora) VirtualHost для SSL настраивается в собственном контейнере. Использование mod_rewrite требует, чтобы в корне документа было установлено как минимум «AllowOverride FileInfo», чтобы он мог действовать.

Проверьте свою конфигурацию на наличие SSL (по умолчанию /etc/httpd/conf.d/ssl.conf), убедитесь, что он выглядит примерно так:

DocumentRoot /var/www/html
<Directory /var/www/html>
  AllowOverride FileInfo
</Directory>

По умолчанию для AllowOverride установлено значение «Нет», поэтому любой другой параметр (например, «Все»), который добавляет возможности FileInfo, подходит.

http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride

Возможно ли, что mod_rewrite не включен для HTTPS-сервера или что .htaccess не используется?

Проверить AllowOveride разрешения, используемые для обычного сайта, и сравнение с версией SSL, вероятно, несоответствие. Наверное, введен для повышения безопасности, если не случайно.

mod_rewrite является почти важным, поэтому любой достойный хостинг-провайдер должен помочь разобраться в этом.

"работает на apache2 + ubuntu Precision"

Подобная проблема возникла у меня, когда я использовал Тонкий каркас и пытаюсь удалить index.php, необходимый в URL-адресе. ReWrite отлично работал для http, но для https: он показывал, что URL-адрес не найден, что означало, что reWrite не работал.

После нескольких пробных попыток я пришел к следующему решению:

 cd /etc/apache2/sites-enabled
 sudo vim default-ssl

Измените AllowOverride None на Все. так же sudo vim ssl

У меня была аналогичная проблема, это сработало для меня.

В вашем httpd.conf убедитесь, что у вас есть оба:

ServerName domain.com

ServerAlias ​​www.domain.com