除了一条路径外,如何使用.htaccess强制SSL

时间:2017-06-26 02:13:13

标签: apache .htaccess mod-rewrite

我正在使用我的.htaccess文件在我的网站上强制使用https。这就是我的.htaccess文件的样子:

# SSL only
RewriteCond %{HTTP:X-Forwarded-Proto} !^https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

我使用DOMPDF渲染pdf,但使用https失败。所以,我想在每个上强制https,除了对pdf文件的请求。如果使用https对pdf文件发出请求,则应将其重定向到仅http。

关于这个问题的几个SO线程,我到目前为止已经有了这个,但是它还没有完成。

# SSL only for all pages except pdf requests
RewriteCond %{HTTP:X-Forwarded-Proto} !^https
RewriteCond %{REQUEST_URI} !^\/listing\/pdf\/(.*)
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

RewriteCond %{HTTP:X-Forwarded-Proto} ^https
RewriteCond %{REQUEST_URI} !^\/listing\/pdf\/(.*)
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301]

我想强制对/listing/pdf?listingId=123发出的任何请求仅为http。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

这应该适合你:

# SSL only for all pages except pdf requests
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteCond %{REQUEST_URI} !=/listing/pdf
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^listing/pdf$ http://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

在测试之前不要忘记清除浏览器缓存,因为之前的尝试可能会被缓存。

<强>更新

如果您不在反向代理之后,请尝试此操作:

# SSL only for all pages except pdf requests
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !=/listing/pdf
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

RewriteCond %{HTTPS} =on
RewriteRule ^listing/pdf$ http://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]