0

我在 .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]

有什么方法可以根据 url 的长度自动从 u1 到 u(infinite),而不必定义每种情况?

4

1 回答 1

2

不,Apache 和正则表达式都不提供对未指定数量参数的编程处理。但是 PHP 是为这样的事情而设计的,所以你最好只使用一个规则:

RewriteRule ^([A-Za-z0-9/-]+)$ /index.php?path=$1

然后让您的 PHP 脚本通过在正斜杠字符上调用explodepath函数来分解变量。你会得到一个包含完整路径的每一部分的数组。

通过这种方式,您的 PHP 脚本可以处理无限数量的路径元素,并且 Apache 无需费力地尝试理解无限的正则表达式模式。

于 2012-09-16T14:08:27.820 回答