重写所有URL到SSL,除非是与Zend框架特定的文件夹(Rewrite all URL to SS

2019-10-16 19:39发布

在此先感谢您的帮助。 我有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线,这是通过框架去。

Answer 1:

我发现了一个解决我的问题。 该课题由发布其他用户帮助,被有关,但我不能让他的解决方案的工作:

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]


文章来源: Rewrite all URL to SSL except specific folders with Zend Framework