设置 mod-rewrite 来处理有数据和无数据的查询

设置 mod-rewrite 来处理有数据和无数据的查询

我有以下 modrewrite 规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/([^/]*)/([^/]*)/$ /blog.php?date=$1&title=$2 [L]

blog.php这很简单。我的问题是,如果没有列出变量,我该如何让这个重写指向?

编写 blog.php 的目的是,如果不存在变量,则生成文章列表;如果存在变量,则创建单独的列表。

编辑: blog.php 在没有 mod rewrite 的情况下运行良好。如果我转到,http://host/blog.php它会列出我的所有文章。如果我转到,http://host/blog/2010-10-05/blog-title/它会显示我的单个条目。同样,如果我转到,http://host/blog.php?date=2010-10-05&title=blog-title我会得到一个条目。但是,我http://host/blog/也想列出我的所有条目。

我想问题是:这是否需要第二条重写规则?如果是这样,我该如何让这两条规则很好地发挥作用。

答案1

从评论讨论来看,就是这样 ;)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(blog|blog/)$ /blog.php [L]
RewriteRule ^blog/([^/]*)/([^/]*)/$ /blog.php?date=$1&title=$2 [L]

只有博客是第一位的,所以如果用户输入了博客或博客/,它将转到 blog.php 并在那里停止,如果不满足该要求,它将转到第二条规则。

(blog|blog/)$

$ 用于防止博客与 blog.html 或其他任何内容匹配。

| 用作运算符 OR,因此如果它是 blog OR blog/

[L] 表示最后,因此如果满足该规则,则之后不会再考虑其他规则。

相关内容