我正在做一个正则表达式,以便将以下网址与相应的文件匹配
/main/type1/dog/type2/food index.php?t1=dog&t2=food
/main/type1/dog/type2/food/ index.php?t1=dog&t2=food
/main/type1/dog/type2/food/menu/puppy index.php?t1=dog&t2=food&menu=puppy
/main/type1/cat/type2/toy/menu/adult index.php?t1=cat&t2=toy&menu=adult
RewriteRule ^/?main/type1/([a-z]+)/type2/([a-z]+)/?(|(menu)/([a-z]+))$ index.php?t1=$1&t2=$2&$menu=$3 [L]
但它没有像我期望的那样起作用。专家解决它的任何线索?谢谢!
答案 0 :(得分:0)
您可以使用以下正则表达式:
^/?main/type1/([a-z]+)/type2/([a-z]+)(/|(/menu/([a-z]+)/?))?$
答案 1 :(得分:0)
尝试:
RewriteRule ^/?main/type1/([a-z]+)/type2/([a-z]+)(?:/(menu)/([a-z]+)|)/?$ index.php?t1=$1&t2=$2&$3=$4 [L]
这样,如果menu
部分不存在,参数将不会传递到index.php脚本中。
答案 2 :(得分:0)
除非你的查询字符串末尾有&=
,否则最好有2个单独的规则:
# for URL with 2 query parameters
RewriteRule ^/?main/[^/]+/([^/]+)/[^/]+/([^/]+)/?$ index.php?t1=$1&t2=$1 [NC,L,QSA]
# for URL with 3 query parameters
RewriteRule ^/?main/[^/]+/([^/]+)/[^/]+/([^/]+)/([^/]+)/([^/]+)/?$ index.php?t1=$1&t2=$1&$3=$4 [NC,L,QSA]