2012-12-25 123 views
2

嘿,我使用codeigniter和添加重写规则从url中删除index.php工作正常。htaccess重定向到https与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} 

我该如何解决这个问题?

回答

4

您需要将您的重定向规则您的路由规则。即使你有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] 
+0

谢谢乔恩,你说得对,这解决了我的问题。 –