我应该将以下URL转换为用户友好格式:

  • example.com/product/$numbers/$anychars => example.com/product.php?product_id=$numbers&name=$anychars
  • example.com/image/$numbers/$anychars/$number => example.com/image.php?image_id=$numbers&name=$anychars&no=$number
  • example.com/item/$numbers/$anychars => example.com/item.php?item_id=$numbers&name=$anychars
  • example.com/category/$anychars => example.com/category.php?name=$anychars
  • example.com/category/$anychars/$numbers => example.com/category.php?name=$anychars&page=$numbers

  • Web服务器应允许和忽略尾部正斜杠。

    使用来自Internet的一些指南,我进行了以下操作:
    RewriteEngine On
    RewriteRule    ^product/([0-9]+)/([^/]+)/?$           product.php?id=$1&name=$2                  [QSA,NC,L]
    RewriteRule    ^image/([0-9]+)/([^/]+)/([0-9]+)/?$    image.php?item_id=$1&item_name=$2&no=$3    [QSA,NC,L]
    RewriteRule    ^item/([0-9]+)/([^/]+)/?$              item.php?id=$1&name=$2                     [QSA,NC,L]
    RewriteRule    ^category/([^/]+)/?$                   category.php?cat=$1&page=0                 [QSA,NC,L]
    RewriteRule    ^category/([^/]+)/([0-9]+)/?$          category.php?cat=$1&page=$2                [QSA,NC,L]
    

    指示NC标志,使其不区分大小写。
    L标志指示在找到一个匹配项后停止搜索匹配项(更少的错误和更快的URL处理)

    初步测试显示没有错误。
    但是由于regexp和mod_rewrite并不是我的最佳爱好,所以我想请您检查我是否没有犯任何错误。如果没有,那对于像我这样的人来说,寻找一个简单的mod_rewrite解决方案可能是一个很好的模式。

    最佳答案

    我会提出一项建议。按从最具体匹配到最普遍匹配的顺序排列规则(在这种情况下,请切换两个类别规则)。通过遵循此约定,可以确保更特定的规则捕获到可能满足多个规则的URL。

    在您的特定情况下,您还不会遇到此问题,但是随着规则的发展,它最终会咬您。

    我还没有添加QSA标志。我建议您创建规则,让用户看到完全友好的URL,而不是部分友好的URL-为此,请确保映射其他参数,就像在现有规则中具有id和类别一样。

    RewriteEngine On
    RewriteRule    ^product/([0-9]+)/([^/]+)/?$           product.php?id=$1&name=$2                  [NC,L]
    RewriteRule    ^image/([0-9]+)/([^/]+)/([0-9]+)/?$    image.php?item_id=$1&item_name=$2&no=$3    [NC,L]
    RewriteRule    ^item/([0-9]+)/([^/]+)/?$              item.php?id=$1&name=$2                     [NC,L]
    RewriteRule    ^category/([^/]+)/([0-9]+)/?$          category.php?cat=$1&page=$2                [NC,L]
    RewriteRule    ^category/([^/]+)/?$                   category.php?cat=$1&page=0                 [NC,L]
    

    08-25 06:54