1

我有以下 mod 重写规则 - 第一个从 URI 请求中删除“index.php”段,第二个强制 HTTPS 连接。然而第二个是重新插入'index.php'。

# send request via index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

# force SSL
RewriteCond %{HTTP_HOST}  \.
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

例如 -

http://www.mysite.tld/somepage

变成

https://www.mysite.tld/index.php?/somepage

我仍在尝试了解如何编写 htaccess 文件,但有没有办法将这两者结合起来避免这个问题?

4

1 回答 1

2

您需要交换规则的顺序。

# force SSL
RewriteCond %{HTTP_HOST}  \.
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# send request via index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

最后一次重定向规则时,它仍在应用,因为第一个规则被应用,重写停止该迭代,然后重写引擎循环,然后第二个规则被应用,URI(现在包含一个index.php)被重定向。

于 2013-09-17T20:08:16.707 回答