如何在mod_rewrite中添加默认参数?

时间:2013-06-03 08:57:01

标签: php apache .htaccess mod-rewrite

在.htaccess文件中,我使用以下规则:

# enable URI rewrite
RewriteEngine On

# if request is for an actual file or directory on disk,
# then do not continue with rewrite engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^category/([^/]+)/([^/]+)/([^/]+)(?:/([^/]+))?/? index.php?to=prepared&section=$1&category=$2&orderby=$3&filter=$4 [L,QSA]

当POST查询“orderby”为空时如何为一个案例制定规则,我希望默认为它分配一些值,例如“rating”?

如果根本没有“orderby”,我想添加默认的“orderby”参数!

非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要让PHP处理缺失值,即分配默认值。重写.htaccess中使用的规则在固定正则表达式上工作,并且不允许像编程语言那样处理逻辑。

要使模式正确匹配,“漂亮”URL中的第三个捕获组需要在原始查询字符串中具有orderby值。 [^/]+明确要求至少需要一个字符(不是斜杠)。

您可以在结尾附近省略非捕获组(?:/([^/]+))?

这将有效,使第4组(过滤器)可选:

^category/([^/]+)/([^/]+)/([^/]+)/([^/]+)?/?