【发布时间】:2012-09-10 01:23:22
【问题描述】:
我正在使用 codeigniter 构建一个站点。我在 .htaccess 文件中有一系列重写条件和规则。第一组规则根据 uri 的第一段打开或关闭 SSL。
然后它再次循环,如果找到匹配项,则适当地重定向页面。如果不匹配,并且 uri 不以列出的任何字符串开头,它会将您重定向到另一个页面。如果不满足条件,则进入索引页面。
问题在于我的第一组打开和关闭 SSL 的规则。我想指定 uri 必须以管理员或安全方式开始。但是如果我将 ^ 添加到字符串的开头,一切都会中断。这是我所拥有的:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/?(admin|secure)
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/?(admin|secure)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
...specific rewrites here
RewriteRule ^secure-form1$ secure/contract/secure-form1 [L]
RewriteRule ^secure$ secure/article/secure [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{REQUEST_URI} !^/(admin|form|secure|page)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/page/article/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
如果我在前 2 个重写条件(https 开启和关闭)中保留 ^ 符号,那么 http://www.example.com/secure 重写为 https://www.example.com/index.php/secure/article/secure 这是最后的重写规则。 url 实际上在浏览器中变成了这个。
如果我从前 2 个重写条件中取出 ^ 符号,那么它会转到正确的页面。但我确实需要指定 uri 的开头,因为在 uri 中间(并在斜线后面)有其他页面不应该使用 SSL。
这个我想不通。
【问题讨论】:
-
你确定你的 php 代码中没有重定向吗?
标签: regex codeigniter mod-rewrite