这是我的重写代码:
RewriteEngine On
RewriteBase "/"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ http://www.whatever.com/$1/ [R=301,L]
RewriteRule ^(.*)$ index.php/$1 [L]
这适用于表达式引擎网站。如果我将这2行删除,该网站工作正常:
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ http://www.whatever.com/$1/ [R=301,L]
我添加的行是为了向任何URL添加尾部斜杠(如果没有),以避免在Google中重复索引。它导致我的日志文件中出现此错误: 请求超出了“由于可能的配置错误导致的10个内部重定向限制”
我认为它没有正确处理RewriteCond并进入无限循环。有没有想过为什么会这样?
答案 0 :(得分:1)
这是我的ExpressionEngine .htaccess,它删除了斜杠,不确定你是否有偏好,但我认为没有它们会更好。
RewriteEngine on
# get rid of trailing slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php) [NC]
RewriteRule ^(.+)\/$ /$1 [L,R=301]
# no plain index.php either
RewriteRule ^(index\.php)$ / [L,NC,R=301]
# rewrite index.php
RewriteCond $1 !^(images|system|themes|favicon\.ico|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
答案 1 :(得分:0)
启用重写日志记录(RewriteLogLevel 3
左右应该执行此操作),并且大多数情况下您会看到请求在
www.whatever.com/blah
www.whatever.com/blah/
www.whatever.com/blah
www.whatever.com/blah/
www.whatever.com/blah
www.whatever.com/blah/
etc....
答案 2 :(得分:0)
首先,原则是:在任何重写之后,整个规则集从头开始处理。 [L]
标志不会阻止这种情况;它控制规则是否是当前运行中的最后一个。
在这种情况下,问题是最后一条规则。它改写了这样的东西:
foo → index.php/foo → index.php/index.php/foo → ...
当您删除这两行时,此规则会附加!-f
和!-d
条件,从而阻止循环。
从行的分组看,您希望将这两个条件附加到以下所有规则。您不能这样做,但您可以将相反的条件附加到将停止处理的规则:
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]