3

嘿,我正在使用 codeigniter 并添加了重写规则以index.php从 url 中删除它工作正常。

但是,我添加了一条规则,将所有 http 请求重定向到 https,但是当它这样做时,它会使用 index.php 进行重定向。

意思是如果我输入这个网址:domain.com/somecoolcontroler

它会将我重定向到:https://domain.com/index.php/somecoolcontroler

但是当之后导航时,它会在没有它的情况下返回正常的 url,所以我猜问题出在重定向规则中,这就是我在 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

1 回答 1

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] 
于 2012-12-25T08:43:49.373 回答