我们有一个购物网站,我们在共享主机(Mediatemple Gridserver)上托管。网站的某些部分需要使用HTTPS(结帐等),但其余部分应使用HTTP。
有谁知道我们如何能够始终强制正确使用特定URL的HTTP / HTTPS?我们已经让它在各种状态下工作,但是我们无法获得应该在HTTP上的页面的请求,但是请求使用HTTPS来正确切换回来。
我已经看了一眼,但找不到合适的答案。
答案 0 :(得分:35)
我在wordpress中使用类似于我的管理文件夹的内容:
#redirect all https traffic to http, unless it is pointed at /checkout
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/checkout/?.*$
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]
RewriteCond %{HTTPS} on
部分可能不适用于所有Web服务器。例如,我的webhost需要RewriteCond %{HTTP:X-Forwarded-SSL} on
。
如果您想强制反向,请尝试:
#redirect all http traffic to https, if it is pointed at /checkout
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/checkout/?.*$
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]
如果您想要其他方法,请查看askapache。
答案 1 :(得分:15)
这应该适用于几乎所有场景,并且应该在您的实际vhost或.htaccess中工作:
RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]
(不要忘记%{REQUEST_URI}之前的斜杠,因为这可能允许传递一个portnumber,这很危险)
答案 2 :(得分:6)
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]
我遇到了一个负责人的问题。这是我如何解决它。
答案 3 :(得分:1)
如this answer中所述,请在需要时修复您的应用以使用https://
链接。不要依赖自动重定向,如果您没有通过https://
提供的链接/表单转到https://
网址,这可能会导致错误的安全感。使用mod_rewrite
会自动更难以发现此类错误(也可能是漏洞)。
答案 4 :(得分:1)
对我来说这是(我将它用于wordpress网站并重定向到HTTPS)。您必须在RewriteEngine和RewriteBase行后面添加条件和规则行:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# I added these two lines for redirect to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R=301,L]
# (end of custom modifications)
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress`
看看条件RewriteCond %{HTTP:X-Forwarded-Proto} !https
- 只有这适用于我的服务器托管。
(我也试过RewriteCond %{SERVER_PORT} !^443$
或RewriteCond %{HTTPS} off
,但没有成功。
答案 5 :(得分:0)
我认为应该是:
RewriteCond %{HTTPS} =on
^/checkout(.*) http://shoppingsite.com/checkout$1 [R]
请参阅mod_rewrite文档。