重写无限的目录深度

时间:2014-04-08 01:39:53

标签: .htaccess mod-rewrite

我有以下重写规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?page=$1&action=$2&other=$3&ajax=0 [L]

当我去这个网址时:

http://www.example.com/test/main/cat/monkey

我的print_r()

看起来像这样:

Array
(
    [page] => test/main
    [action] => cat
    [other] => monkey
    [ajax] => 0
)

但我希望看到的输出如下:

Array
(
    [page] => test
    [action] => main
    [other] => cat/monkey
    [ajax] => 0
)

在“行动”之后应该将多少项目com附加到“其他”我的重写有什么问题?

1 个答案:

答案 0 :(得分:1)

这是因为.+是贪婪的,所以它会尽可能多地吞噬尽可能多的文本,同时尽可能地满足表达式的其余部分。您可以将模式更改为[^/]+,如果您不希望它匹配斜杠:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)/(.+)$ /index.php?page=$1&action=$2&other=$3&ajax=0 [L]