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

10

У меня есть простой файл .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]
Шелдон МакГи
источник

Ответы:

20

Здесь недостаточно информации на 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


источник
1
Я не вижу /etc/httpd/conf.d/ssl.conf в моем linux, как его найти?
Ашок К.С.
1
(1) Возможно, вам потребуется поискать файл conf. Например, в некоторых системах /etc/apache2/sites-enabled/default-ssl.conf(2) для ясности, если у вас все еще есть проблемы, попробуйте AllowOverride Allвместо AllowOverride FileInfo. Как только вы начнете работать, вы можете прочитать AllowOverideподробные документы Apache, чтобы более конкретно ограничить доступ для максимальной безопасности. (3) Помните, что вы должны перезапустить apache, чтобы настройки вступили в силу.
SilentSteel
4

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

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

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

Orbling
источник
1

"работает над apache2 + ubuntu точное"

Подобная проблема возникла у меня, когда я использовал Slim Framework и пытался удалить index.php, требуемый в URL. Перезапись отлично работала для http, но для https: показывался url not found, что означало, что перезапись не работала.

После некоторой хитовой попытки я придумал это решение:

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

Измените AllowOverride None на All . Точно так же sudo vim ssl

mareenator
источник
0

У меня была похожая проблема, вот что у меня сработало.

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

ServerName domain.com

ServerAlias ​​www.domain.com

Йони Хассин
источник