【发布时间】:2014-01-22 20:03:18
【问题描述】:
我应该将以下 URL 转换为用户友好的格式:
example.com/product/$numbers/$anychars => example.com/product.php?product_id=$numbers&name=$anycharsexample.com/image/$numbers/$anychars/$number => example.com/image.php?image_id=$numbers&name=$anychars&no=$numberexample.com/item/$numbers/$anychars => example.com/item.php?item_id=$numbers&name=$anycharsexample.com/category/$anychars => example.com/category.php?name=$anycharsexample.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