我是这个社区的新手,但我发现它有时真的很有用。
我搜索了很多答案,但没有找到我需要的任何东西。我已经尝试自己解决它,但我仍然遇到错误,所以我希望找到可以向我展示正确方法的人...:-)
我有一个“经典的”ZF 网站,其中有许多 Controller /操作 url,这些 url 使用 .htaccess 文件重定向到 index.php。
现在,我需要的是将几个 Controller 重定向到 https ssl 连接,排除两个 Controller 的某些操作。
我尝试这样做的方式是:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^mydomain\.tld [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond $1 ^!((member|shop)/(?!(index|login))(.*))
RewriteRule ^(.*) http://%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{HTTPS} off
RewriteCond $1 ^((member|shop)/(?!(index|login))(.*))
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !\.(js|ico|gif|jpg|png|css|swf|pdf|txt)$ index.php
当我去/member controller 时它似乎工作 但是,当我转到另一个 Controller 时,例如/index 或/about 它不会重定向到 http 连接(端口 80),如果我尝试稍微更改重写条件正则表达式,它有时会执行重定向循环和浏览器给我一条通知,阻止与该站点的连接。
有没有人可以向我展示在我的重写条件下使用的正确语法,以允许两个 Controller (不包括给定的操作)在 https 连接下并在更改 Controller 时返回到标准 http 连接?
提前致谢。
亚历山德罗
最佳答案
试试这些规则(替换适当的行):
RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} !^/(member|shop)/ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{HTTPS} off [NC]
RewriteCond %{REQUEST_URI} ^/(member|shop)/ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]
- 这些规则有点简单(HTTPS 将应用于
/member/
和/shop/
Controller 中的所有 URL(例如/member/login
,/member/dashboard
,/member/orders/15423/invoice
等) - Negate
!
应该在 RewriteCond 指令中 before^
-- 如果你想要自己的规则,那么替换RewriteCond $1 ^! ((member|shop)/(?!(index|login))(.*))
通过RewriteCond $1 !^((member|shop)/(?!(index|login))( .*))
关于zend-framework - htaccess https 仅在特定的 Zend Frameworks Controller /操作上重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580154/