2011-07-16 3 views
2

J'ai un site WordPress et je souhaite rediriger des pages spécifiques vers HTTPS. Plus précisément, je veux http://www.mydomain.com/?page_id=4 être redirigé vers https://www.mydomain.com/?page_id=4. L'approche que j'ai pris est d'ajouter ce qui suit à .htaccess:Rediriger des pages WordPress spécifiques vers HTTPS

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^http://www.mydomain.com/?page_id=4 [NC] 
RewriteRule ^(.*)$ https://www.mydomain.com/?page_id=4/$1 [R=301,L] 

Mais lorsque je navigue à la page, il ne redirige pas. Des pensées?

+0

Vous faites correspondre avec 'HTTP_HOST'. Vous devriez faire correspondre avec 'REQUEST_URI'. – TRiG

Répondre

2

Bien ... %{HTTP_HOST} variable sera résolu à un nom de domaine seulement et dans votre exemple, il sera juste www.mydomain.com. Vous aurez besoin de plus que cela:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
# force secure version of this page 
RewriteCond %{QUERY_STRING} ^page_id=(\d+) [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/$1?page_id=%1 [R=301,L] 
  1. Vous devez comparer la chaîne de requête, le protocole et le cas échéant le nom de domaine séparément par 3 déclarations RewriteCond.

  2. J'ai supprimé /$1 de l'URL cible - cela n'a aucun sens. Tout ce que cette règle supposée faire est de rediriger vers une version sécurisée de ceci et seulement cette URL particulière.

  3. Je ne suis pas sûr que cette ligne est vraiment nécessaire: RewriteCond %{HTTP_HOST} =www.mydomain.com. Cela devrait fonctionner sans cela.

  4. Assurez-vous de mettre cette règle à l'endroit approprié - elle doit être placée AVANT Règles de réécriture WordPress.


MISE À JOUR: Alternative:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
# force secure version of this page 
RewriteCond %{QUERY_STRING} ^page_id=(\d+)(.*) [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/$1 [QSA,R=301,L] 
+0

Merci! Cela a fonctionné et votre explication a été très utile. Une question de suivi: J'ai vraiment besoin de rediriger toutes les pages où page_id = 3, 4 ou 5. (pas seulement "www.mydomain.com/?page_id=4"). Savez-vous comment je devrais éditer le code pour y parvenir? – brian

+0

@brian Vérifiez ma réponse mise à jour (2 petites modifications). Cela fonctionnera pour la même URL mais avec des ID différents. Si vous voulez l'avoir pour une URL complètement différente - veuillez fournir un exemple ou 2 afin que je puisse ajuster la règle correctement. – LazyOne

+0

Salut. le code mis à jour redirige les pages vers https, mais les pages sont cassées. Voici le message d'erreur que je reçois: "Avertissement: Argument invalide fourni pour foreach() dans [path]". – brian

0

Merci pour toute l'aide. J'ai trouvé une solution de contournement. Je code essentiellement un bloc pour chaque page #:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
#force secure version of page=4 
RewriteCond %{QUERY_STRING} =page_id=4 [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/?page_id=4 [R=301,L] 

#force secure version of page=5 
RewriteCond %{QUERY_STRING} =page_id=5 [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/?page_id=5 [R=301,L] 

#force secure version of page=6 
... 

Pas élégant, mais cela fonctionne.

Un dernier numéro. Il est possible que les URL contiennent des caractères après le paramètre page_id. Par exemple: www.mydomain.com/?page_id=4 & catégorie = 1. Est-ce que quelqu'un sait comment placer un caractère générique après le page_id = 4? Merci!

Questions connexes