【问题标题】:Correct .htaccess file for user-friendly URL为用户友好的 URL 更正 .htaccess 文件
【发布时间】:2014-01-22 20:03:18
【问题描述】:

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

  1. example.com/product/$numbers/$anychars => example.com/product.php?product_id=$numbers&name=$anychars
  2. example.com/image/$numbers/$anychars/$number => example.com/image.php?image_id=$numbers&name=$anychars&no=$number
  3. example.com/item/$numbers/$anychars => example.com/item.php?item_id=$numbers&name=$anychars
  4. example.com/category/$anychars => example.com/category.php?name=$anychars
  5. example.com/category/$anychars/$numbers => example.com/category.php?name=$anychars&page=$numbers

网络服务器应允许和忽略尾随正斜杠。

使用互联网上的一些指南,我做了以下事情:

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 处理)

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

【问题讨论】:

  • 看起来不错,但将 /{0,1} 替换为 /? 并使用您的标志添加 QSA 标志。
  • 谢谢@anubhava,我按照您的建议进行了更改,一切看起来都很好!
  • 不客气,很高兴它成功了。

标签: regex apache .htaccess mod-rewrite


【解决方案1】:

我会提出一项建议。将规则按从最具体匹配到最一般匹配的顺序排列(在这种情况下,切换两个类别规则)。通过遵循此约定,您可以确保可能满足多个规则的 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]

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 2014-06-20
    • 1970-01-01
    • 2013-08-31
    • 2012-06-03
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多