php - Forcing SSL for all but one directory in CodeIgniter with .htaccess -
i realize there's been lot of questions along these lines @ point i've read through of them , think situation unique.
i'm trying use .htaccess force https make optional 1 directory (which called pirate). i've done things before time didn't cooperate. first started code forces use https.
<ifmodule mod_rewrite.c> rewriteengine on rewritebase / rewritecond %{server_port} 80 rewriterule ^(.*)$ https://%{server_name}%{request_uri} [l,r=301] rewritecond $1 !^(blog|images|css|js|robots\.txt|favicon\.ico) rewritecond %{request_filename} !-f rewritecond %{request_filename} !-d rewriterule ^(.*)$ /index.php?/$1 [l] </ifmodule> <ifmodule !mod_rewrite.c> errordocument 404 /index.php </ifmodule> then added exception (i'm showing first rule here):
rewritecond %{server_port} 80 rewritecond %{request_uri} !^(/pirate/) [nc] rewriterule ^(.*)$ https://%{server_name}%{request_uri} [l,r=301] that should it! controllers should go https:
1) http://www.mysite.com/contact/ -> https://www.mysite.com/contact check. pirate controller should able https:
2) https://www.mysite.com/pirate/ -> https://www.mysite.com/pirate/ no change. perfect! lastly pirate controller should able old http:
3) http://www.mysite.com/pirate/ -> https://www.mysite.com/index.php?/pirate/ that's not right. still forces https , stopped hiding index.php. summarize, have 2 conditions , rule. seems if first condition true , second 1 false rule applied , second rule applied , 301 redirect returned. know sounds strange if wasn't wouldn't asking.
why happening , how fix it?
you need add additional exclusion controller, or add passthrough @ top. either:
<ifmodule mod_rewrite.c> rewriteengine on rewritebase / rewritecond %{server_port} 80 rewritecond %{request_uri} !^/pirate/ [nc] rewritecond %{request_uri} !^/index\.php [nc] rewriterule ^(.*)$ https://%{server_name}%{request_uri} [l,r=301] rewritecond $1 !^(blog|images|css|js|robots\.txt|favicon\.ico) rewritecond %{request_filename} !-f rewritecond %{request_filename} !-d rewriterule ^(.*)$ /index.php?/$1 [l] </ifmodule> or
<ifmodule mod_rewrite.c> rewriteengine on rewritebase / rewriterule ^index\.php$ - [l] rewritecond %{server_port} 80 rewritecond %{request_uri} !^/pirate/ [nc] rewriterule ^(.*)$ https://%{server_name}%{request_uri} [l,r=301] rewritecond $1 !^(blog|images|css|js|robots\.txt|favicon\.ico) rewritecond %{request_filename} !-f rewritecond %{request_filename} !-d rewriterule ^(.*)$ /index.php?/$1 [l] </ifmodule> the reason redirect happening rewrite engine loops. after original uri routed index.php, rewrite engine loops again , redirect rule gets applied , routed uri gets redirect.
Comments
Post a Comment