我正在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/安全 ,这是最后的重写规则。url 实际上在浏览器中更改为此。
如果我从前 2 个重写条件中取出 ^ 符号,那么它会转到正确的页面。但我确实需要指定 uri 的开头,因为在 uri 中间(并在斜线后面)有其他页面不应该使用 SSL。
我想不通这个。