2013-03-17 58 views
0

我已经成功通过的.htaccess这些规则切换我的所有网站的https:的.htaccess力整个网站的https

RewriteCond %{HTTPS} off [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA] 

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

现在我有一个问题,因为使用POST一些第三方服务网址如下:

http://sub.mydomain.com/agreg/sms/service 

被拒绝是因为它们被重定向,现在被GET。

我想在每个网址上使用^/agreg/方案禁用这个“强制https”的东西。我试图

RewriteCond %{HTTPS} off [NC] 
RewriteCond %{REQUEST_URI} !^/agreg 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA] 

但现在重定向到http://sub.mydomain.com/app.php

什么我错过这里?

非常感谢您的帮助!

回答

2

问题:

我想停用与 ^/agreg /方案的每个URL这个 “力https” 开头的东西。我试图

RewriteCond %{HTTPS} off [NC] 
RewriteCond %{REQUEST_URI} !^/agreg 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA] 

但现在重定向到http://sub.mydomain.com/app.php


嗯,这是根据规则有效的结果。

还有第二条规则将所有内容重定向到app.php。这一个:

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

虽然传入的URL http://sub.mydomain.com/agreg/sms/serviceSo,例如,从第1章排除,在第二规则被改写。

SOLUTION:

假设预期的行为是可排除来自两个规则包含字符串agreg任何URL,它应该是这样的:

RewriteCond %{HTTPS} off [NC] 
RewriteCond %{REQUEST_URI} !/agreg  [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !/agreg  [NC] 
RewriteRule ^(.*)$ /app.php [QSA,L] 

重写条件只适用于下一规则。有必要在最后一个规则块中添加相同的NOT条件。

+0

嗨@faa,谢谢你的回答!乍一看似乎是正确的。 ^/agreg不被https捕获。但我需要通过第二条规则来抓住它。我正在运行Symfony2框架,并且^/agreg/something不是真正的路径,而是由app.php上Symfony2路由器解释的东西。所以,我的问题是我需要它来打开app.php,但不能重写url作为app.php我是否克莱尔? ;) – guillaumepotier 2013-03-18 11:02:57

+0

是的。你想在浏览器的地址栏中显示什么? – 2013-03-18 15:12:01

+0

随着你的规则,/ agreg /无论停留在酒吧。但不是内部指向/app.php(哪个进程请求)。所以我在这些url上找不到404。 – guillaumepotier 2013-03-18 17:19:28