RewriteCond %{HTTPS} off [SAU]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]
Nu ați precizat exact ce se întâmplă sau unde indică subdomeniile, așa că ar putea apărea și alte probleme aici.
Cu toate acestea, dacă subdomeniile dumneavoastră indică aceeași zonă a sistemului de fișiere (sau poate un subdirector) ca și domeniul principal, atunci regula de mai sus va redirecționa toate subdomeniile către www.example.com
- deci subdomeniul este „pierdut”.
În funcție de cerințele dvs., puteți rezolva acest lucru doar verificând exemplu.com
în loc de !^www\.
și împărțirea redirecționării HTTP către HTTPS în propria sa regulă. De exemplu:
# HTTP la HTTPS (inclusiv subdomenii)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Redirecționare canonică non-www către www numai pentru domeniul principal
RewriteCond %{HTTP_HOST} ^(example\.com)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
Va trebui să ștergeți memoria cache a browserului înainte de a testa. (De preferință testați cu 302 - temporare - redirecționări pentru a evita potențialele probleme de cache.)
Cu toate acestea, directivele sunt, de asemenea, în ordine greșită (acest lucru nu are nimic de-a face cu problema subdomeniului). Redirecționările canonice (mai sus) trebuie să meargă inainte de rescrierile interne. Deci, dvs .htaccess
fișierul ar trebui să fie ordonat astfel:
IndexIgnora *
RewriteEngine Pornit
RewriteBase /
# HTTP către HTTPS (inclusiv subdomenii)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Redirecționare canonică non-www către www numai pentru domeniul principal
RewriteCond %{HTTP_HOST} ^(example\.com)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
# Eliminați extensia „.php” de pe adresa URL solicitată
RewriteCond %{THE_REQUEST} \s/(.+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]
# Solicitare de rescrie internă pentru a adăuga extensia „.php”.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]