0

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

应排除的页面具有以下 URL:

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

我已经测试了正则表达式,它们似乎与 URL 匹配得很好。但是,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>

任何帮助将不胜感激!

4

1 回答 1

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

替换注释之间的所有行。

于 2013-03-08T15:30:00.060 回答