使用mod_rewrite检测空的查询字符串

时间:2012-01-29 06:25:15

标签: php apache mod-rewrite

我有一个奇怪的问题,在哪里生成我正在使用我的URL的页面:

site / city / city-name / page-number

表示mod_rewrite是:

RewriteRule ^city/(.*)/(.*)$ tagcity.php?tag=$1&pnum=$2 [L] 

但现在的问题是,如果我删除城市名称并将其设为空,如“site / city // page-number”,则会开始将page-number作为city-name。

也可以只有一次重写来提供带或不带页码的页面吗?

我知道这是一个奇怪的情况但不幸的是我的一些网站页面在Google中被编入索引。

如何检测到它是空的,以便我可以生成404页面?

1 个答案:

答案 0 :(得分:0)

改为使用+

RewriteRule ^city/(.+)/(.*)$ tagcity.php?tag=$1&pnum=$2 [L,QSA]

*表示" 0或更多重复",而+表示" 1或更多重复"。因此,使用+要求该字段至少包含某些内容


此外,您可能需要设置[L,QSA],以便在原始网址中有任何其他查询参数时,它们将被保留。 (QSA =查询字符串追加)


根据评论中的要求,可以处理完全缺少页码的规则:

RewriteRule ^city/([^/]+)(?:/(.*))?$ tagcity.php?tag=$1&pnum=$2 [L,QSA]