I would like to know why is this configuration returning me a 308 when requesting to /api/client via http (port 80).
Note: The device that receive the response is an ARDUINO, he doesnt handle the 3XX responses.
RewriteCond %{REQUEST_URI} !='/api/client' # ....
#RewriteCond expr "%{REQUEST_URI} -strmatch '/api/client'" #Doesn't work
#RewriteCond expr "%{REQUEST_URI} !~/api/" #Doesn't work
#RewriteCond !%{REQUEST_URI} ^/api/client #Doesn't work
#RewriteCond %{REQUEST_URI} !^/api/client #Doesn't work
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://example.com/$1 [R=308,L]
The objetive is to redirect all the HTTP request (Port 80) to HTTPS except the requests to /api/client
CodePudding user response:
The objective is to redirect all the HTTP request (Port 80) to HTTPS except the requests to
/api/client
Try this rule with THE_REQUEST
variable:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{THE_REQUEST} !/api/client [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [NE,R=308,L]
THE_REQUEST
variable represents original request received by Apache from your browser and it doesn't get overwritten after execution of other rewrite directives. Example value of this variable is GET /index.php?id=123 HTTP/1.1
Make sure to test it after clearing old cache or from a new browser.