2010-01-16 5 views
12

Voici le code que j'ai actuellement dans mon fichier .htaccess:.htaccess redirection 301 pour rediriger https à http SAUF UNE PAGE

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

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Je sais prise à propos de réécritures ... et tous les autres postes sur ce sujet ne correspond pas vraiment à mes critères et je ne connais pas assez la langue pour essayer de la déchiffrer.

Fondamentalement, ce que j'ai besoin est ceci:

  1. redirect toutes les instances de "example.com" à "www.example.com"
  2. redirect toutes les instances de "https //www.example .com "à" http: //www.example.com "à l'exception de 1 page !!!! (Dans le cas où il importe, le nom de cette page est payments.php)

Le code que j'ai ci-dessus fonctionne, mais pour la 1 page que je dois être https, il est en train de réécrire l'URL http. Cette page doit être https.

Merci, Chris

+0

Merci à tous pour vos commentaires! Chris – dell116

Répondre

10

Apache/2.2.6 (Win32) mod_ssl/2.2.8 OpenSSL/0.9.8g PHP/5.2.6

Je l'ai testé sur place, tous les cas d'utilisation semblent fonctionner correctement. Si vous avez d'autres questions, n'hésitez pas à demander.

# Rewrite Rules for example.com 
RewriteEngine On 
RewriteBase/

# Redirect from example.com to www.example.com 
RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

# Turn SSL on for payments 
RewriteCond %{HTTPS} off 
RewriteCond %{SCRIPT_FILENAME} \/payments\.php [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

# Turn SSL off everything but payments 
RewriteCond %{HTTPS} on 
RewriteCond %{SCRIPT_FILENAME} !\/payments\.php [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

IMPORTANT! Lorsque l'utilisateur navigue de toute https avec www à toute https la page sanswww, il est demandé d'accepter le certificat de sécurité de votre domaine non www.

Par exemple (YES = demande d'accepter le certificat, NO - ci-contre):

1) https://www.asdf.com/payments.php - YES (www.asdf.com) 
2) http://www.asdf.com/phpinfo.php - NO 
3) https://asdf.com/phpinfo.php - YES (asdf.com) 
4) https://www.asdf.com/phpinfo.php - NO 

J'ai essayé de modifier l'ordre des règles en .htaccess sans succès. Si quelqu'un trouve une meilleure solution, ce sera très apprécié.

+0

Merci! Cela fonctionne parfaitement. En attendant, j'aimerais lire un peu plus sur ce genre de choses. Avez-vous de bonnes suggestions? – dell116

+1

Vous pouvez toujours lire le manuel;) http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

-1
# Rewrite Rules for example.com 
RewriteEngine On 
RewriteBase/

# Redirect from example.com to www.example.com 
RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

# Disable SSL on pages other than payments.php 
RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^payments\.php$ 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

# Require SSL on payments.php 
RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^payments\.php$ 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

Je ne l'ai pas testé, mais quelque chose comme ça devrait fonctionner

Edit: Mise à jour

+0

Ceci permet toujours à toutes les autres pages d'être https (ne les réécrivant pas à http). Cela ne réécrit pas http://www.example.com/payments.php à https://www.example.com/payments.php La première redirection fonctionne toujours. Je vois ce que vous obtenez à ..... et il semble être juste .... il ne fonctionne tout simplement pas. D'autres idées? Merci, Chris – dell116

+0

J'ai réglé votre code un peu. Un problème est, cependant, que cela nécessite d'accepter à la fois les certificats example.com et www.example.com. –

5

en plus grande solution de william, vous pouvez annuler demande uri quelque part avant https rewriterule

RewriteCond %{REQUEST_URI} !^/?payments\.php 
+0

C'est vraiment la bonne solution. – dotancohen

0

Ce fut un beau poste et il semble rediriger vers http correctement, mais je veux quelque chose comme ce qui suit

RewriteCond %{HTTP_HOST} ^site\.com 
RewriteRule (.*) http://www.site.com/$1 [R=301,L] 

#RewriteCond %{SERVER_PORT} !^443$ 
#RewriteRule ^products https://www.site.com/products/ [R=301,L] 

# Disable SSL on pages other than payments.php 
RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^products 
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L] 

# Require SSL on payments.php 
RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^products\/?$ 
RewriteRule ^(.*)$ https://www.site.com/$1 [R=301,L] 


RewriteCond $1 !^(index\.php|images|js|css|static|img|payment|robots\.txt|blank.gif) 
RewriteRule ^(.*)$ index.php/$1 [L] 

mon URL est http://www.sitename.com et la barre oblique de fin est facultative ce que j'ai besoin est s'il est pas de texte comme produits dans l'URL alors il doit lui http: // et s'il y a une chaîne de produits dans la uri alors il devrait être https: //

comment faire ... quand je essayé il va à une boucle ... boucle de redirection. J'utilise le travail du cadre codeigniter et j'ai supprimé index.php de l'URL.

donc si quelque chose comme http://sitename.com/products a eu lieu alors je veux que ce soit https://sitename.com/products

et s'il n'y a aucun produit dans l'URL alors il devrait rediriger vers http: //