使用mod_rewrite将http切换为https

时间:2013-02-19 12:59:52

标签: http mod-rewrite https

我知道有很多类似的问题,但我花了两天多时间调查它没有成功,所以你是我最后的希望)

我写了以下重写规则:

RewriteCond %{HTTPS} off [NC]
RewriteCond %{REQUEST_URI} ^((/member/settings)?/orders/?)$ [NC]
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]

RewriteRule \.(gif|jpe?g|png|css|js|eot|woff|ttf|svg)$ - [NC,L]

RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} !^((/member/settings)?/orders/?)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [NC,QSA,L]

我希望网址example.com/orders/example.com/member/settings/orders/始终重定向到HTTPS,而其他所有网址都强制使用HTTP。此外,所有查询都应转发至index.php。 而且,显然,所有媒体文件应保持与请求相同的协议。

当我首先请求http://example.com/orders/时,它会重定向到https://example.com/orders/,但随后会重定向到http://example.com/index.php?/orders/。实际上是预期的,但问题是'index.php'出现在浏览器的地址栏中。

问题是如何摆脱浏览器地址栏中的'index.php'?

任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

  

然后第二次重定向到http://example.com/index.php?/orders/ ....我不知道“index.php”在URL中出现的位置......

因为你有一个RewriteRule来做到这一点:

RewriteRule ^(.*)$ index.php?/$1 [NC,QSA,L]

不确定你想在那个街区完成什么,但试着去除它。