在mod_rewrite中从HTTPS中排除特定页面

时间:2013-03-08 14:41:26

标签: .htaccess codeigniter mod-rewrite

我正在尝试设置一个codeigniter应用程序,以强制除了一个以外的所有页面使用HTTPS。但是,如果用户在相关网页上,我无法将规则仅重定向。

应排除的网页包含以下网址:

数字 67 ,日期可以在上面的网址中更改,因此下面是正则表达式的用户。

我测试了正则表达式,它们似乎与网址相符。但是,htaccess似乎只是将其重定向到https://无论如何。

我的.htaccess文件如下......

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Disallow access to system dir
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Disallow access to application dir
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Force https when not on overview report
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/index\.php\?/kpi/reports/?([0-9]+)$
    RewriteCond %{REQUEST_URI} !^/index\.php\?/kpi/reports/?([0-9]+)/overview/?([0-9]+)-?([0-9]+)-?([0-9]+)/?([0-9]+)-?([0-9]+)-?([0-9]+)$
    RewriteCond %{REQUEST_URI} !^/kpi/reports/?([0-9]+)$
    RewriteCond %{REQUEST_URI} !^/kpi/reports/?([0-9]+)/overview/?([0-9]+)-?([0-9]+)-?([0-9]+)/?([0-9]+)-?([0-9]+)-?([0-9]+)$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=302,L]

    #If not a valid file, redirect request through index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

也许这会做你需要的:

#Force https when not on overview report
RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} !kpi/reports/[0-9]+/?$                     [NC]  
RewriteCond %{QUERY_STRING} !kpi/reports/[0-9]+/overview/[^/]+/[^/]+/? [NC]
RewriteCond %{REQUEST_URI}  !kpi/reports/[0-9]+/?$                     [NC]
RewriteCond %{REQUEST_URI}  !kpi/reports/[0-9]+/overview/[^/]+/[^/]+/? [NC]
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI}           [R=302,L]

#If not a valid file, redirect request through index.php

替换评论之间的所有行。