EVIGE SIDER - \ "At leve efter Guds ord \" - Gæst: Minister Roger Mike

Jeg kører en Wordpress-blog, der har et problem med HTTPS-omdirigering. Bortset fra hjemmesiden omdirigeres ingen anden URL til HTTPS, hvis du besøger via HTTP.

Jeg vil omdirigere al HTTP-trafik til HTTPS. I øjeblikket omdirigeres kun startsiden (http://www.example.com) til HTTPS, hvis du prøver med HTTP.

men hvis du besøger http://www.example.com/page1, bliver den ikke omdirigeret til HTTPS og forbliver på HTTP.

Jeg ønsker ikke at bruge noget plugin såsom "virkelig enkel SSL". Efter et lille stykke søgning over nettet fandt jeg ud af, at jeg kan ændre .htaccess fil for at gøre det. Derefter forsøgte jeg at forstå .htaccess-filen (i betragtning af at jeg aldrig har arbejdet med PHP eller WordPress eller endda Apache før). Det fik jeg at vide RewriteEngine On skal kun vises en gang i din fil, men i mit tilfælde vises den to gange. måske havde et plugin eller tema ændret dette, som jeg ikke er opmærksom på. nedenfor er indholdet af min .htaccess-fil.

# 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 ikke nogen underdomæner. kun et enkelt domæne. Så for at fjerne min tvivl har jeg to spørgsmål.

1) Er denne .htaccess-fil korrekt? Jeg mener, kan vi have to RewriteEngine On linjer? det også uden for, igen er jeg ikke særlig fortrolig med denne syntaks.

2) Hvad skal jeg ændre for at afspejle HTTPS-omdirigering på alle mine sider?

Desuden brød det også omdirigering af ikke-WWW til WWW.

PS: dette er et af de links, jeg har besøgt -

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

.htaccess syntaks flere RewriteEngine til

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

Din HTTPS-omskrivningsregel bliver aldrig udført, fordi den er efter RewriteRule . /index.php [L]. Denne regel matcher alle URL-stier og er den sidste regel, der udføres for dem på grund af L flag.

For at få denne omdirigeringsregel til at fungere skal du blot flytte den til toppen af .htaccess fil.

WordPress selv foretager nogle omdirigeringer. Hvad der sandsynligvis sker her er, at den ene omdirigering, du ser, udføres af WordPress PHP-koden snarere end udført af .htaccess.

  • Så du mener, jeg skal bare flytte de sidste 3 linjer øverst i filen (dvs. før )? kunne det muligvis forårsage noget problem?
  • Jeg ville lægge dem før # BEGIN WordPress. WordPress kan overskrive alt i sin sektion. Det vil ikke give nogen problemer med at flytte disse regler op, det får dem til at begynde at arbejde.
  • Tak, jeg kan ikke stemme svaret, da jeg har mindre end 15 omdømme. markerede det bare som svar.
  • "den ene omdirigering, du ser, udføres af WordPress PHP-koden" - Den foregående WP frontcontroller fanger ikke anmodninger om hjemmesiden (den matcher ikke mønsteret . og det er også en vejviser, så tilstanden også ville mislykkes), så det er meget sandsynligt, at omdirigering ind .htaccess - i slutningen af ​​filen - udløses for denne anmodning (som det også ville gøre for enhver statisk ressource). "Denne regel matcher alle URL-stier" - alle URL-stier, der er mindst 1 tegn lange (undtagen skråstregpræfikset).

Ved at hente inspiration fra @ Stephens svar løste jeg det ved at flytte de sidste 3 linjer lige før mod_rewrite blok.

# 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 imellem BEGIN WordPress og END WordPress, så jeg ville flytte det længere op. Hvis du skulle lægge det derinde, ville jeg placere det øverst i IfModule mod_rewrite.c blokere og fjerne det overflødige RewriteEngine On.
  • Kan du opdatere dit svar med det opdaterede script? det kan være forvirrende for begyndere

arbejdet for dig: Charles Robertson | Ønsker du at kontakte os?

nyttige oplysninger