.htaccess Edge Case

时间:2009-05-25 02:24:59

标签: apache .htaccess url-rewriting friendly-url

我在.htaccess中使用这些规则和条件来转换这些

http://www.example.com/index.php/about/history
http://www.example.com/about/history/index.php

http://www.example.com/about/history

的.htaccess

# ensure there is no /index.php in the address bar
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php\ HTTP/
    RewriteRule ^(.*)index\.php$ $1 [R=301,L,NS]

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php(.*)\ HTTP/ [NC]
    RewriteRule ^index\.php/(.*) $1 [NS,NC,L,R=301]

除非存在URL为

的情况
http://www.example.com/about/index.php/history/

这将导致无限循环的重定向。现在我知道这可能很罕见,但我希望如果可能的话不会发生。我怎样才能改变我的规则来容纳这个?

More info here about my .htaccess

1 个答案:

答案 0 :(得分:2)

如果我理解正确你只想删除它出现的index.php?在这种情况下,您的解决方案过于复杂。你可能想要像

这样的东西
RewriteRule ^(.*)index\.php/(.*)$ $1$2 [NS,NC,L,R=301]

这应该是唯一的规则,也不需要RewriteCond