如何解决冲突的mod_rewrite规则和条件

时间:2017-01-23 16:24:36

标签: apache .htaccess codeigniter mod-rewrite expressionengine

我的.htaccess中有几条重写规则似乎有冲突。

我正在运行一个ExpressionEngine(CodeIgniter)网站,该网站使用index.php文件解析所有URI。我出于审美原因从URI中删除了index.php。

我想要实现的目标:

  • 使用尾部斜杠重定向301所有页面(example.com/bla/ =>
    example.com/bla)
  • 从所有URI
  • 中删除index.php

我现在拥有的:

{{1}}

什么有效:

  • 所有深层链接都会重定向到非尾部斜杠版本 (example.com/bla/ => example.com/bla)。
  • index.php将从所有深层链接页面中删除。

什么行不通:

  • 主页(example.com)在Go​​ogle Chrome中向我显示错误,说“重定向太多”。

如何更新条件和规则,以便实现没有尾部斜杠的干净链接,也没有index.php,无论它是哪个页面。

1 个答案:

答案 0 :(得分:1)

有这样的话:

RewriteCond %{HTTPS} !=on
RewriteCond %{SERVER_ADDR} !=127.0.0.1
RewriteCond %{SERVER_ADDR} !=::1
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule ^(.*?)index\.php(/.*)?$ /$1$2 [R=301,NE,L]

RewriteCond $1 !^(images|system|themes|index\.php|admin\.php|favicon\.ico|robots\.txt|humans\.txt|crossdomain\.xml) [NC]
RewriteRule ^(.*)$ index.php/$1 [L]

在测试前清除浏览器缓存。