Last RewriteRule抓住了一切

时间:2017-03-16 14:27:24

标签: regex apache .htaccess

这是我的.htaccess文件:

<FilesMatch "\.(htm|html|css|js|php)$">
    AddDefaultCharset UTF-8
    DefaultLanguage en-US
</FilesMatch>

<IfModule mod_rewrite.c>

    # Rewrite
    RewriteEngine On

    #catch everything that ends ".r" and route to resources.php
    #<-- WORKS IF THE CATCH ALL RULE IS COMMENTED OUT -->
    RewriteRule ^(.*)\.r$ resources.php [L,QSA,NC]

    #catch everything listed in regex and throw 403 <-- WORKS FINE -->
    RewriteRule "\.(txt|json|xml|lock|log)" "-" [F]

    #TODO: BUG : Make this stop catching all
    #catch everything that the other 2 doesn't
    #<-- CATCHES EVERYTHING ALSO WHAT THE TOP RULE IS SUPPOSE TO -->
    RewriteRule ^(.*)$ index.php [QSA]
    #RewriteRule !"^(.*?)\.r$" index.php [QSA,NC,L]
    #RewriteRule ^(?!.*[.]r$).*$ index.php [QSA,NC]

</IfModule>

评论几乎总结了一切。

我希望能够通过以&#34; .r&#34;结尾的链接链接到我的资源。我已经测试了正则表达式,它似乎工作正常但我似乎无法弄清楚为什么它在我输入一个URL然后以&#34; .r&#34;结束时一直显示索引。

我已经坚持这个问题4个小时了,我想我需要一些帮助我在这里寻找答案(stackoverflow)但我似乎无法找到答案。我可能已经看过了答案,我可能已经盯着一个明显的错误。

另外,我检查了apache错误日志并且它没有抛出任何错误,所以我不知道错误可能在哪里,但正如我所说,我可能已经盯着自己对这个问题视而不见。

我希望你们能帮助我:D

由于

1 个答案:

答案 0 :(得分:0)

得到the answer解决了问题,感谢starkeen