Чому переадресації .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 - "None", тому будь-яке інше налаштування (наприклад, "Усі"), яке додає можливості FileInfo, добре.

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


1
Я не бачу /etc/httpd/conf.d/ssl.conf в моєму Linux, як його знайти?
Ашок К.С.

1
(1) Можливо, вам доведеться шукати файл конф. Наприклад, у деяких системах це /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 це поруч з важливим, хоча будь-який гідний хостинг-провайдер повинен допомогти розібратися в цьому.


1

"працює над apache2 + ubuntu точним"

Подібна проблема трапилася зі мною, коли я використовував рамку Slim і намагався видалити index.php, необхідний в URL-адресі. Перезапис працював ідеально для http, але для https: він показував URL не знайдений, а це означає, що перезапис не працює.

Після декількох хіт-н-проб я придумав таке рішення:

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

Змінити AllowOverride None на всіх . Аналогічно sudo vim ssl


0

У мене були подібні проблеми, саме це працювало на мене.

У своєму httpd.conf переконайтесь, що у вас є обидва:

ServerName domain.com

ServerAlias ​​www.domain.com

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.