0

我有以下重写规则:

RewriteRule ^/events$ /pagebase.php?pbid=3627 [QSA,L,I]
RewriteRule ^/events-list$ /pagebase.php?pbid=3663 [QSA,L,I]
RewriteRule ^/bob2013$ /pagebase.php?pbid=3688 [QSA,L,I]
RewriteRule ^/contact-us$ /pagebase.php?pbid=3634 [QSA,L,I]
RewriteRule ^/detail$ /pagebase.php?pbid=3890 [QSA,L,I]

在我需要传入查询字符串之前,这很好用。

所以如果我输入

http://www.domain.com/events 它运行良好。

但是如果我输入

http://www.domain.com/events?type=1

然后重写失败,因为它不再匹配“事件”。

但是,如果我删除美元符号,那么它工作正常。查询字符串类型正确传递。

像这样。

RewriteRule ^/events$ /pagebase.php?pbid=3627 [QSA,L,I]

但是,问题在于,如果有人键入事件列表的 url。

http://www.domain.com/events-list

重写匹配“事件”页面显示该页面。

基本上,我需要知道如何解决这个问题。

4

1 回答 1

1

最简单的解决方案是相应地对规则进行排序:在一般规则之前的特定规则

由于第一条规则(没有$末尾的)包括第二条规则,所以将第二条规则放在第一条之前:

RewriteRule ^/events-list /pagebase.php?pbid=3663 [QSA,L,I]
RewriteRule ^/events      /pagebase.php?pbid=3627 [QSA,L,I]

现在任何以 开头的 url/events-list都将被重写为pbid=3663.

但是,为了防止 url like/events-anything匹配,最好在规则中包含可选查询字符串的匹配:

RewriteRule ^/events-list(\?.*)?$ /pagebase.php?pbid=3663 [QSA,L,I]
RewriteRule ^/events(\?.*)?$      /pagebase.php?pbid=3627 [QSA,L,I]
于 2013-01-13T14:27:17.487 回答