我们有以下mod_rewrite条件/规则,但是如果它们没有精确地等同于我们对应的目录(/ i / css),那么对于仅仅开始“i”(或“css”)的URL返回404错误等)
RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|/(i|css|design_and_docs|js|test)/*)
RewriteRule ^(.*)$ /index.php/$1 [L]
然后这不允许我有一个路由/ URI(使用CodeIgniter,但我认为不重要),例如/ itemid或/ idcommand(只是我过去一周需要的一对)
我可以轻松地修改RewriteCond,如下所示,以测试尾部斜杠,但是对于没有尾部斜杠的/ i目录的请求失败,而之前它已经工作了:
RewriteCond $1 !^(index\.php|robots\.txt|/(i|css|design_and_docs|js|test)\//*)
使用尾部斜杠/ i /仍然可以解析,这可能足以满足我们的目的。但我真的希望/我仍然解决相应的/ i目录。因此,我不想仅仅测试尾部的斜线,而是测试一个尾部斜杠,或缺少任何字符。
如何使用正则表达式执行此操作?
答案 0 :(得分:1)
不是仅使用\/
作为尾部斜杠,而是检查一个子组并检查字符串的结尾,即$:(\/|$)
RewriteCond $1 !^(index\.php|robots\.txt|/(i|css|design_and_docs|js|test)(\/|$)/*)
答案 1 :(得分:0)
我不确定/
正在做你期待的事情。 AFAIK您不需要.htaccess
中的前导斜杠。你试过这个:
RewriteCond $1 !^(index\.php|robots\.txt|i/|css/|design_and_docs/|js/|test/)