当某些查询字符串变量为空时,URL重写不起作用

时间:2011-11-23 17:12:38

标签: regex apache .htaccess url-rewriting query-string

我的.htaccess文件中有以下规则规则

RewriteRule dest/(.*)/item/(.*)/aId/(.*)/tId/(.*)/? rss.php?dest=$1&item=$2&aId=$3&bId=$4 [NC,L]

这会产生以下URL http://domain.com/dest/NYC/item/coke/aId/1234/bId/asdbg

但如果缺少aId和tId,则会抛出404错误: http://domain.com/dest/NYC/item/coke

有人可以帮我找出原因吗?非常感谢

1 个答案:

答案 0 :(得分:0)

因为/dest/NYC/item/coke与正则表达式dest/(.*)/item/(.*)/aId/(.*)/tId/(.*)/?不匹配,所以干净的SEO友好URL不会被重写为rss.php来处理,我会假设你没有在文档根目录中有一个目录树,看起来像“/ dest / NYC / item / coke”,因此是404.你需要稍微修改规则以适应缺少的参数:

RewriteRule ^dest/(.*)/item/(.*)/aId/(.*)/tId/(.*)/?$ rss.php?dest=$1&item=$2&aId=$3&bId=$4 [NC,L]
RewriteRule ^dest/(.*)/item/(.*)/?$ rss.php?dest=$1&item=$2 [NC,L]

第二条规则将处理干净网址中缺少 aId tId 的情况。