htaccess使用index.php重定向到https

时间:2012-12-25 08:25:28

标签: apache .htaccess codeigniter mod-rewrite

嘿,我正在使用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}

我该如何解决?

1 个答案:

答案 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]