使用.htaccess强制http://或https://的选择性SSL

时间:2010-06-10 19:41:30

标签: performance apache http .htaccess ssl

出于性能原因,我试图更有选择性地使用SSL页面/请求。我想使用htaccess仅针对所需网页重定向到https://,并将所有其他内容重定向回http://。这就是我所拥有的:

RewriteEngine On

# force https
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)/(abc|xyz)(.*)$ https://%{HTTP_HOST}/$1/$2 [R=301,NC,L]

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{HTTP_REFERER} !^https(.*)/(abc|xyz)(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ initialize.php [QSA,L]

安全请求应为abcxyz。问题是,如果请求http:// example.com/abc,则会重定向到http://example.com/initialize.php。非安全页面按预期工作。

1 个答案:

答案 0 :(得分:0)

由于这是一个有数年历史的问题,我很确定它已经解决了,但对于那些可能遇到这种情况的人来说,我认为这样的事情可能有效。要了解上面abcxyz的内容有点难,但我会假设它们是URI路径的一部分。

# Forward some URI's to HTTPS.
RewriteCond %{HTTPS} =off
RewriteCond $1 (abc|xyz) [NC]
RewriteRule ^(.+)$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,S=1,L]

# Forward rest of the request to HTTP
RewriteCond %{HTTPS} =on
RewriteCond $1 !(abc|xyz) [NC]
RewriteRule ^(.+)$ http://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ initialize.php [QSA,L]

另外,解决此问题的提示是启用mod_rewrite logging