不确定是否有合理的方法可以做到这一点,或者我是否遗漏了一些东西。我有一个我构建的内容管理系统,它通过模板系统传递所有内容(它本质上是一个执行处理的单个 PHP 文件)。考虑到这一点,以下规则将向 lucy.php 发送请求,其中验证了 url 并加载了适当的模板。
RewriteRule ^$ lucy.php [L,QSA]
RewriteRule ^([^/\.]+)/?$ lucy.php?section1=$1 [L,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ lucy.php?section1=$1§ion2=$2 [L,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ lucy.php?section1=$1§ion2=$2§ion3=$3 [L,QSA]
因此,URL 的每一部分都作为 section# 变量发送到脚本。我的问题是当我使用需要自己的 URL 系统的模板时。在这种情况下......一个博客。通常,我会做类似的事情
RewriteRule ^blog/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/\.]+)/?$ site/blog.php?year=$1&month=$2&day=$3&blog_url=$4 [L,QSA]
将请求发送到一次性脚本。我现在这样做的方式是http://domain.com/blog仍将通过前面提到的 lucy.php 脚本来加载和显示博客模板。那么,是否可以继续允许将请求的 /blog 部分路由到适当的重写规则,但也可以将年、月、日和 blog_url 字段附加到查询字符串?/blog url 不会始终相同,甚至可能不会被称为博客,所以我需要一些可以动态工作的东西。
我唯一的想法是复制 lucy.php 重写的每个实例,以包含基于日期的结构的可选参数。就像是...
RewriteRule ^([^/\.]+)/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/\.]+)/?$ lucy.php?section1=$1&year=$2&month=$3&day=$4&item_url=$5 [L,QSA]
但我认为可能有更有效的方法来做到这一点。该约定的另一个问题是我希望它适用于其他场景,如类别、作者和其他非博客场景。我不想为这些实例中的每一个复制 lucy.php 重写块。想法?