htaccess https在父级但http在子目录中

时间:2014-03-25 22:05:38

标签: php apache .htaccess http redirect

我已尝试为此问题实施一些建议的解决方案,但无法正常工作。

我正在使用2个.htaccess文件,一个在我的根目录中,其内容如下:

RewriteEngine on
RewriteBase /
RewriteRule ^(webservice|api) - [L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.domain.com%{REQUEST_URI}  [R=301,L]

这会通过我需要的https将所有流量重定向到主网站。

但是在子目录中,我想禁用重新路由并强制通过http转到此目录的所有请求。 / webservice / rest /中的.htaccess文件:

RewriteEngine On
RewriteBase /webservice/rest/
RewriteCond %{HTTPS} on
RewriteRule (.*) http://www.domain.com/webservice/rest/%{REQUEST_URI}  [R=301,L]
RewriteRule ^testingPost/?$ testingPost.php [NC]
RewriteRule ^([a-zA-Z0-9\_\-]+)/?(\?([a-zA-Z0-9\_\-\=\?\&]))?$ otherfiledirect.php?method=$1&params=$2 [NC]

有一些重定向发生,但第二个htaccess中的第3和第4行似乎没有做任何事情 - 任何人都可以看到我做错了什么以及如何将https保留在主站点上但是强制在/ webservice / rest / ??

下的任何网址上的http

干杯

2 个答案:

答案 0 :(得分:3)

问题在于服务器中的ssl配置文件。允许覆盖需要在端口443的安全虚拟主机下设置为All。更改后,root htaccess文件中的以下代码允许我在除特定文件夹之外的整个网站上强制使用https:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !/webservice     [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}  [R=301,L]

因此对http的任何请求都将转到https。但是我仍然需要在我指定的文件夹上明确地将请求更改为https以重定向到http,因此在上面添加了以下代码:

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} /webservice      [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

防弹。

答案 1 :(得分:0)

/webservice/rest/.htaccess中尝试此操作,并确保在新浏览器中进行测试:

RewriteEngine On
RewriteBase /webservice/rest/

RewriteCond %{HTTPS} on
RewriteRule ^ http://www.domain.com/%{REQUEST_URI} [R=301,L,NE]

RewriteRule ^testingPost/?$ testingPost.php [L,NC]

RewriteRule ^([\w-]+)/?(\?([\w-=?&]))?$ otherfiledirect.php?method=$1&params=$2 [L,NC]