我有一个内置codeigniter的网站。我们使用数据库中的简短网址和重写规则以将它们重定向到完整路径。
例如,
RewriteRule ^secure-form$ form/contract/secure-form [L]
这本身就可以正常工作。但我想在某些页面上使用SSL。我编辑了代码,这样如果你转到其中一个页面,页面中http://的所有实例都会被https://替换,但我需要重写url以便使用它。
这些页面都使用相同的模板,所有内容都来自数据库,所以我不能只在特定目录上指定ssl。
安全页面的网址都以“安全”开头,因此我编写了以下规则并将其置于其他重写之上。
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/secure/?.*$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/secure/?.*$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^secure-form$ form/contract/secure-form [L]
RewriteRule ^secure-different-form$ form/contract/secure-different-form [L]
all other rewrite rules for specific pages follow
then the default rewrite further down...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
问题在于,当我添加规则来更改协议时,它最终会在网址中显示“form / contract / secure-form”而不是“secure-form”。
这会使页面上的实际表单失效,因为它使用该url来构建自己。
如果我删除了更改协议的规则,它会在网址中显示安全表单,但页面不安全。
我做错了什么?
---- ---- UPDATE 哦,经过20多个小时的搜索,我想我终于得到了答案。所以,第一次通过,https关闭&开启了。然后,由于301,它再次运行&页面被发送到表单/合同/安全......但这次,https已开启。由于uri不再具有安全性,因此会关闭https。
希望这会有助于其他人。