.htaccess 301 reindirizza per tutti https a http TRANNE UNA PAGINA

Ecco il codice che ho attualmente nel mio file .htaccess:

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] 

Conosco Jack delle riscritture … e tutti gli altri post su questo argomento non corrispondono ai miei criteri e non conosco abbastanza il linguaggio per cercare di decifrarlo.

Fondamentalmente quello di cui ho bisogno è questo:

  1. reindirizza tutte le istanze di “example.com” a “www.example.com”
  2. reindirizza tutte le istanze di ” https //www.example.com” a ” http : //www.example.com” con l’eccezione di 1 pagina !!!! (nel caso abbia importanza, il nome file di quella pagina è payments.php)

Il codice che ho sopra funziona, ma per la pagina 1 che ho bisogno di essere https, sta riscrivendo l’url su http. Quella pagina deve essere https.

Grazie, Chris

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

L’ho provato localmente, tutti i casi d’uso sembrano funzionare bene. Se hai ulteriori domande, non esitare a chiedere.

 # 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] 

IMPORTANTE! Quando l’utente naviga da qualsiasi pagina https con www a qualsiasi pagina https senza www , viene richiesto di accettare il certificato di sicurezza del dominio non www.

Ad esempio (SÌ = richiesta di accettazione del certificato, NO – opposto):

 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 

Ho provato a riordinare le regole in .htaccess senza successo. Se qualcuno trova una soluzione migliore, sarà molto apprezzata.

oltre all’ottima soluzione di william, puoi annullare la richiesta uri da qualche parte prima di https rewriterule

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

Quello era un bel post e sembra redirect correttamente a http, ma voglio qualcosa come il seguente

 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 ^(.*)$ http://sofit.miximages.com/apache/.txtblank.gif) RewriteRule ^(.*)$ index.php/$1 [L] 

il mio url è http://www.sitename.com e la barra finale in avanti è facoltativa ciò di cui ho bisogno è se non ci sono prodotti di testo come nell’URL, allora ha bisogno di lui http: // e se c’è una stringa di prodotti in l’uri allora dovrebbe essere https: //

come farlo … quando ho provato, si tratta di un loop … loop di reindirizzamento.

Sto usando il lavoro con il frame di codice e ho rimosso index.php dall’URL.

quindi se qualcosa come http://sitename.com/products si è verificato allora voglio che sia https://sitename.com/products

e se non ci sono prodotti nell’url allora dovrebbe redirect a http: //

 # 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] 

Non l’ho provato ma qualcosa del genere dovrebbe funzionare

Modifica: aggiornato