Dlaczego przekierowania .htaccess działają w http, ale nie w https?

10

Mam prosty plik .htaccess, który działa świetnie w wersji http witryny, ale nie, gdy przejdę do https. Dlaczego?

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]
Sheldon McGee
źródło

Odpowiedzi:

20

Nie ma tutaj 100% wystarczających informacji, aby przejść dalej, ale w zwykłej domyślnej konfiguracji SSL (np. Red Hat / CentOS / Fedora) VirtualHost dla SSL jest ustawiony we własnym kontenerze. Użycie mod_rewrite wymaga ustawienia przynajmniej „AllowOverride FileInfo” w katalogu głównym dokumentu, aby mógł on działać.

Sprawdź konfigurację pod kątem SSL (domyślnie /etc/httpd/conf.d/ssl.conf), upewnij się, że wygląda to tak:

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

Domyślną wartością AllowOverride jest „None”, więc każde inne ustawienie (takie jak „All”), które dodaje możliwości FileInfo, jest OK.

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


źródło
1
Nie widzę /etc/httpd/conf.d/ssl.conf w moim systemie Linux, jak go znaleźć?
Ashok KS
1
(1) Może być konieczne wyszukanie pliku conf. Na przykład w niektórych systemach jest to /etc/apache2/sites-enabled/default-ssl.conf(2) Aby być bardzo przejrzystym, jeśli nadal masz problemy, spróbuj AllowOverride Allzamiast AllowOverride FileInfo. Gdy już zaczniesz działać, możesz szczegółowo przeczytać AllowOveridedokumenty Apache, aby bardziej szczegółowo ograniczyć dostęp i zmaksymalizować bezpieczeństwo. (3) Pamiętaj, że musisz ponownie uruchomić apache, aby ustawienia odniosły skutek.
SilentSteel
4

Czy to możliwe, że mod_rewrite nie jest włączony dla serwera HTTPS lub że plik .htaccess nie jest używany?

Sprawdź używane AllowOverideuprawnienia dla zwykłej witryny i porównaj z wersją SSL, prawdopodobnie rozbieżność. Prawdopodobnie wprowadzony w celu poprawy bezpieczeństwa, jeśli nie wypadek.

mod_rewrite jest jednak niezbędny, więc każdy porządny dostawca hostingu powinien to rozwiązać.

Orbling
źródło
1

„działa na apache2 + precyzyjny ubuntu”

Podobny problem wystąpił podczas korzystania ze środowiska Slim i próbowania usunięcia pliku index.php wymaganego w adresie URL. ReWrite działało idealnie dla http, ale dla https: pokazywał, że nie znaleziono adresu URL, co oznaczało, że reWrite nie działa.

Po kilku próbach trafiłem na to rozwiązanie:

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

Zmień AllowOverride None na All . Podobnie sudo vim ssl

mareenator
źródło
0

Miałem podobny problem, to działało dla mnie.

Upewnij się, że w httpd.conf masz oba:

NazwaSerwera domena.com

ServerAlias ​​www.domain.com

Yoni Hassin
źródło