Apache重写条件和缺少字符

时间:2009-12-16 13:17:12

标签: regex apache mod-rewrite

我们有以下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目录。因此,我不想仅仅测试尾部的斜线,而是测试一个尾部斜杠,缺少任何字符。

如何使用正则表达式执行此操作?

2 个答案:

答案 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/)