EVIGE SIDER - \ "Å leve etter Guds ord \" - Gjest: Minister Roger Mike

Jeg driver en Wordpress-blogg som har et problem med HTTPS-viderekobling. Bortsett fra hjemmesiden blir ingen annen URL omdirigert til HTTPS hvis du besøker via HTTP.

Jeg vil omdirigere all HTTP-trafikk til HTTPS. For øyeblikket blir bare hjemmesiden (http://www.example.com) omdirigert til HTTPS hvis du prøver med HTTP.

men hvis du besøker http://www.example.com/page1, blir den ikke omdirigert til HTTPS og forblir på HTTP.

Jeg vil ikke bruke noen plugin som "veldig enkel SSL". Etter en liten bit av søk over nettet, fant jeg ut at jeg kan endre .htaccess filen for å gjøre det. Så prøvde jeg å forstå .htaccess-filen (med tanke på at jeg aldri har jobbet med PHP eller WordPress eller til og med Apache før). Jeg fikk vite det RewriteEngine On skal vises bare en gang i filen din, men i mitt tilfelle vises den to ganger. kanskje noen plugin eller tema hadde endret dette som jeg ikke er klar over. nedenfor er innholdet i .htaccess-filen min.

# BEGIN WordPress # The directives (lines) between `BEGIN WordPress` and `END WordPress` are # dynamically generated, and should only be modified via WordPress filters. # Any changes to the directives between these markers will be overwritten.  ExpiresActive On ExpiresByType image/jpg 'access plus 24 hours' ExpiresByType image/jpeg 'access plus 24 hours' ExpiresByType image/gif 'access plus 24 hours' ExpiresByType image/png 'access plus 24 hours' ExpiresByType text/css 'access plus 24 hours' ExpiresByType application/pdf 'access plus 1 week' ExpiresByType text/javascript 'access plus 24 hours' ExpiresByType text/html 'access plus 5 minutes' ExpiresByType image/x-icon 'access plus 1 year' ExpiresDefault 'access plus 24 hours'   Header set X-Endurance-Cache-Level '2'   RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Jeg har ingen underdomener. bare et enkelt domene. Så for å fjerne tvilen min, har jeg to spørsmål.

1) Er denne .htaccess-filen riktig? Jeg mener kan vi ha to RewriteEngine On linjer? at også utenfor, jeg er ikke veldig kjent med denne syntaksen.

2) Hva skal jeg endre for å gjenspeile HTTPS-omdirigering på alle sidene mine?

Videre brøt det også omdirigering av ikke-WWW til WWW.

PS: dette er en av lenkene jeg har besøkt -

https://wordpress.org/support/article/htaccess/

.htaccess syntaks flere RewriteEngine på

https://www.hostinger.com/tutorials/ssl/forcing-https

HTTPS-omskrivingsregelen blir aldri utført fordi den er etter RewriteRule . /index.php [L]. Denne regelen samsvarer med alle URL-baner og er den siste regelen som ble utført for dem på grunn av L flagg.

For å få den omdirigeringsregelen til å fungere, bare flytt den til toppen av .htaccess fil.

WordPress selv gjør noen viderekoblinger. Det som sannsynligvis skjer her er at den ene viderekoblingen du ser, gjøres av WordPress PHP-koden i stedet for av den .htaccess.

  • Så du mener, jeg trenger bare å flytte de siste 3 linjene øverst i filen (dvs. før )? kan det muligens forårsake noe problem?
  • Jeg ville lagt dem før # BEGIN WordPress. WordPress kan overskrive alt i sin seksjon. Det vil ikke forårsake noen problemer med å flytte disse reglene opp, det vil få dem til å begynne å jobbe.
  • Takk, jeg kan ikke stemme på svaret ettersom jeg har mindre enn 15 omdømme. bare merket det som svar.
  • "den ene viderekoblingen du ser er utført av WordPress PHP-koden" - Den forrige WP-frontkontrolleren fanger ikke forespørsler om hjemmesiden (den samsvarer ikke med mønsteret . og det er også en katalog, så vil tilstanden også mislykkes), så det er ganske sannsynlig at viderekoblingen inn .htaccess - på slutten av filen - utløser for denne forespørselen (som det ville gjort for alle statiske ressurser også). "Denne regelen samsvarer med alle URL-baner" - alle URL-baner som er minst 1 tegn lange (unntatt skråstrek-prefikset).

Ved å hente inspirasjon fra @ Stephens svar løste jeg det ved å flytte de siste 3 linjene rett før mod_rewrite blokkere.

# BEGIN WordPress # The directives (lines) between `BEGIN WordPress` and `END WordPress` are # dynamically generated, and should only be modified via WordPress filters. # Any changes to the directives between these markers will be overwritten.  ExpiresActive On ExpiresByType image/jpg 'access plus 24 hours' ExpiresByType image/jpeg 'access plus 24 hours' ExpiresByType image/gif 'access plus 24 hours' ExpiresByType image/png 'access plus 24 hours' ExpiresByType text/css 'access plus 24 hours' ExpiresByType application/pdf 'access plus 1 week' ExpiresByType text/javascript 'access plus 24 hours' ExpiresByType text/html 'access plus 5 minutes' ExpiresByType image/x-icon 'access plus 1 year' ExpiresDefault 'access plus 24 hours'   Header set X-Endurance-Cache-Level '2'  RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 
  • WordPress kan overskrive alt mellom BEGIN WordPress og END WordPress, så jeg ville flyttet det lenger opp. Hvis du skulle sette den der inne, ville jeg satt inne i toppen av IfModule mod_rewrite.c blokker og fjern overflødig RewriteEngine On.
  • Kan du oppdatere svaret ditt med det oppdaterte skriptet? det kan være forvirrende for nybegynnere

fungert for deg: Charles Robertson | Ønsker du å kontakte oss?