我试图强制所有的网站都https。所以我做了:Htaccess强制https除了在一个网址上不起作用
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
它的工作原理。问题是我希望mywebsite.com/api/...上的http调用也可以工作。所以我加RewriteCond %{REQUEST_URI} !^/api(/.*)?
。
我的.htaccess是:
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/api(/.*)?
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
但它不工作。如果我打电话http://mywebsite.com/api/xxx它会将我重定向到https://mywebsite.com/index.php ..
我不知道为什么。你有什么想法?
我使用的Zend 1
---- ----编辑
改变了我的.htaccess这样:
RewriteEngine On
# HTTPS
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/api(/.*)?
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
Options +Indexes
IndexIgnore *
但仍然无法正常工作
--- - 编辑2 ----
新的.htaccess(这一个工作):
RewriteEngine On
RewriteBase/
# HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/api
RewriteCond %{QUERY_STRING} !^/api
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [NC,L,QSA]
我不得不与QUERY_STRING
添加条件,改变过去重定向到index.php
谢谢@MrWhite
你是在代理服务器后面吗? – MrWhite
@MrWhite nop,而不是代理 – RichardLenoir