我在.htaccess中执行此操作:
RewriteRule ^([A-Za-z0-9-]+)[/]?$ /index.php?u1=$1 [L,QSA]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)[/]?$ /index.php?u1=$1&u2=$2 [L,QSA]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)[/]?$ /index.php?u1=$1&u2=$2&u3=$3 [L,QSA]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)[/]?$ /index.php?u1=$1&u2=$2&u3=$3&u4=$4 [L,QSA]
有没有办法根据网址的长度自动从u1到u(无限)自动生成,而不必定义每个案例?
答案 0 :(得分:2)
不,Apache和正则表达式都不提供对未指定数量的参数的编程处理。但PHP是专门为这些东西设计的,所以你最好只使用一个规则:
RewriteRule ^([A-Za-z0-9/-]+)$ /index.php?path=$1
然后让你的PHP脚本通过调用正斜杠字符上的explode函数来打破path
变量。你会得到一个包含完整路径的每一段的数组。
这样你的PHP脚本就可以处理无限数量的路径元素,并且Apache不需要自己试图理解无限正则表达式模式。