在此先感谢您的帮助。 我有Zend框架的设置我们的Web应用程序,并已使用基本SSL重定向到现在工作得很好。 我们希望所有重定向URL对SSL,只是一对夫妇的路径。 一个路径工作正常,只是加载图像文件。 但是其他的路径不,它是一个Zend框架控制器,需要请求参数的动作。
这是我们的电流,工作配置:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !(/images)
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
排除图像,并允许ZF发挥作用,但我们想也URI路径/ wsrv /排除任何的ItemData,我们尝试使用这种状况的上述作品:
RewriteCond %{REQUEST_URI} !(/wsrv/itemdata)
/ wsrv /的ItemData可以包括以这种格式几个参数:
/wsrv/itemdata/item_nbr/111111/some_other_arg/a-value
我们的问题是,它总是重定向到的index.php,这是针对SSL。 我们需要重定向到index.php为框架的功能,但不使用SSL只为单个控制器和动作/ wsrv /的ItemData。
我感谢所有帮助。 谢谢!
编辑12年6月4日:(解决大部分!)它不是URL重写,它在我的装载机Zend框架的东西。 我添加的规则之下,并用一些测试文件,规则工作。 但是东西在我的架构设置是重定向它。
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !(/images/)
RewriteCond %{REQUEST_URI} !(/wsrv/itemdata/)
RewriteCond %{REQUEST_URI} !(/test/make/)
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
上述工作,除了/ wsrv /的ItemData线,这是通过框架去。
我发现了一个解决我的问题。 该课题由发布其他用户帮助,被有关,但我不能让他的解决方案的工作:
htaccess的HTTPS仅在特定的Zend框架控制器/重定向行为
我的解决方案的工作,除一个问题,这并没有阻止我前进。 下面列出的重写规则允许我忽略在特定的Zend框架控制器和操作方法SSL连接,同时迫使别的不存在的正常使用SSL连接。 (基本上,强制所有SSL,但一个路径)
唯一例外的解决方案是在发送URL中的“/”结尾。 如果我没有在结尾的斜线发送,它仍然会自动转发我的index.php。 因为我需要反正传递的参数,最后的斜线是存在的,所以对我的作品。 工作原理:/ wsrv /的ItemData /作品:/ wsrv /的ItemData / item_nbr / 123456 / otherarg / otherval不起作用:/ wsrv /的ItemData
下面是最终的,复杂的重写规则:
RewriteEngine On
#if req is normal file, dir
#then pass in request unchanged (show css, js, img, etc, no ZF)
#do not proc more rules
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
#if req is ssl
# and not wsrv/itemdata
# and not images
# and not test/make
# then rewrite req to index.php to use ZF
#do not proc more rules
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !wsrv/itemdata/
RewriteCond %{REQUEST_URI} !images/
RewriteCond %{REQUEST_URI} !test/make/
RewriteRule ^.*$ index.php [L]
#NOTE: itemdata/ must have trailing / in client requsts
# In other words, requesting /wsrv/itemdata will redirect to index
# I don't know how to fix that yet
# But / is always used anyway because request args are used
# Ex: /wsrv/itemdata/item_nbr/12345678
#if req is NOT ssl
# and we want wsrv/itemdata/
#then rewrite without ssl to ZF index.php
#do not proc more rules
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} wsrv/itemdata/
RewriteRule ^.*$ index.php [L]
# Last if none above match, check for non-ssl
#if req is ssl
# and not wsrv/itemdata
# and not images
# and not test/make
# then REDIRECT to https:// using same URI
#do not proc more rules
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !wsrv/itemdata/
RewriteCond %{REQUEST_URI} !images/
RewriteCond %{REQUEST_URI} !test/make/
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]