【问题标题】:IIRF / APACHE REWRITE REMOVE QUERY STRING FROM CONDITIONSIIRF / APACHE 重写从条件中删除查询字符串
【发布时间】:2013-01-12 23:04:14
【问题描述】:

我有以下重写规则:

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

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

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

【问题讨论】:

  • 你测试过这个吗?因为 RewriteRule 只匹配路径(不包括查询字符串)

标签: apache .htaccess mod-rewrite url-rewriting iirf


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2012-09-25
    • 1970-01-01
    • 2016-10-19
    • 2013-09-02
    相关资源
    最近更新 更多