嘿,我正在使用codeigniter并添加了重写规则,以从网址中删除index.php
,工作正常。
但是,我添加了一条规则来将所有http请求重定向到https,但是当它执行时会重定向到index.php。
如果我输入此网址的含义:domain.com/somecoolcontroler
它会将我重定向到:https://domain.com/index.php/somecoolcontroler
但是当导航之后它会回到没有它的普通网址,所以我猜问题是在重定向规则中,这就是我放在htaccess中的内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
我该如何解决?
答案 0 :(得分:5)
您需要将重定向规则置于路由规则之前。重写引擎循环,所以即使你有L
标志,它也会第二次循环遍历你的路由规则并点击重定向规则,除了这次,URI已经被重写了。
如果重写规则是第一个,它将在应用路由规则之前重定向浏览器。然后,当进行重定向的请求时,应用路由规则。你还需要一个L
标志。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]