出于性能原因,我试图更有选择性地使用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]
安全请求应为abc
或xyz
。问题是,如果请求http:// example.com/abc
,则会重定向到http://example.com/initialize.php
。非安全页面按预期工作。
答案 0 :(得分:0)
由于这是一个有数年历史的问题,我很确定它已经解决了,但对于那些可能遇到这种情况的人来说,我认为这样的事情可能有效。要了解上面abc
和xyz
的内容有点难,但我会假设它们是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。