我应该将以下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]