2012-07-16 22 views
1

我已经生成的URL像禁用SSL上的某些URL Zend框架

http://miapp.com/module/controller/action/params/values 

我想从SSL排除有一个参数(打印或下载)

其实一定URL的Zend的应用我有这样的.htaccess PARAMS到所有请求通过SSL重定向和生成动态URL重写

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-s  
RewriteCond %{REQUEST_FILENAME} !-l  
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /index.php [NC,L] 
php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 

但我怎么能排除的包含打印或下载的网址吗?

Ÿ尝试类似的东西:(但我得到重定向循环错误

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_REFERER} !^https(.*)/(print|download)(.*)$ [NC] 
RewriteCond %{REQUEST_URI} !^(.*)/(print|download)(.*)$ [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 
RewriteCond %{REQUEST_FILENAME} !-s  
RewriteCond %{REQUEST_FILENAME} !-l  
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /index.php [NC,L] 
php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 
+0

为什么从HTTPS连接重定向到HTTP连接?你为什么不把你的应用程序中的链接改为'http:// yourapp/path/to/download'? – vstm 2012-07-16 19:06:43

+0

嗨@vstm主要原因是因为我们需要所有的应用程序运行SSL,只有两个资源de SSL关闭(Internet Explorer失败) – OsDev 2012-07-16 20:22:05

回答

2

通常有大约在它们的Web服务器内部完成重写规则的误解。这是只要有真重定向返回一个带有新URL和STATUS CODE 3xx的重定向到浏览器

你的第二个htaccess有两个重定向你的第一个规则告诉浏览器“Dude,使用SSL”。再试一次“。如果请求不是HTTPS,则在用新的U返回301状态码之后连接终止RL给客户。在htaccess文件中不再处理行。浏览器必须发送一个新的请求到服务器。

如果您的第一句话是正确的,并且您在没有https的情况下在Zend Framework中创建了URL,那么这是一个好处。如果你这样做,你基本上会产生大量的流量,因为每个请求都会被重定向到301,即通过浏览器返回并重新发送。您应该使用https在Zend中创建您的URL以避免这种情况。

现在谈谈你的第二条规则。此规则告诉浏览器“Dude,您的路径包含打印或下载,您不需要HTTPS,请重试。”如上所述,连接现在终止,并且在htaccess文件中不再处理行。当然,这个新的要求将在你的第一条规则上发挥重要作用,这将在你提到的循环中结束。

现在你真正需要的是这个,我相信(我无法测试它)。您将打印|下载作为例外添加到HTTPS条件中。

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_REFERER} !^https(.*)/(print|download)(.*)$ [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 

在你的Zend应用程序中,你将不得不确保你的链接只是HTTP。重写规则不起作用,但您的IE请求。

+0

Woooow卓越的答案:D谢谢@Adrian世界这是一个很好的解释 – OsDev 2012-07-30 14:08:45