我有以下 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] 表示最后,因此如果满足该规则,则之后不会再考虑其他规则。