mod_rewrite具有未知数量的变量

时间:2010-01-23 03:46:42

标签: .htaccess mod-rewrite

我正在尝试使用mod_rewrite来处理未知数量的变量。

示例网址为:

example.com/var1-var2-var3/title

到目前为止,我有这个:

RewriteRule ^([^/.]+)-([^/]*)(.*)$ $3?version[]=$1&version[]=$2 [QSA,N]
RewriteRule ^([^/.]+)/?$ ?title=$1 [QSA,N]
RewriteRule ^/?$ /index.php [QSA,L]

返回: 数组([title] => title [版本] =>数组([0] => var1-var2 [1] => var3))

我需要它返回:Array([title] =&gt; title [version] =&gt; Array([0] =&gt; var1 [1] =&gt; var2 [2] =&gt; var3))< / p>

1 个答案:

答案 0 :(得分:3)

我认为你不能在一个RewriteRule正则表达式中捕获任意数量的参数。重定向到index.php?version=var-var2-var3会不会更容易,然后在PHP中explode() $_POST['version']上进行# Convert up to 8 arguments. RewriteRule ^/([^-]+)-(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?/(.*)$ index.php?t=$9&v[]=$1&v[]=$2&v[]=$3&v[]=$4&v[]=$5&v[]=$6&v[]=$7&v[]=$8 # Strip empty ones. RewriteRule [?&]v\[\]=$ "" [N]

编辑:您可以为有限数量的变量执行此操作(9是我认为的最大捕获子组),然后删除多余的空条目。梅西耶然后在我看来简单的爆炸()替代方案,但在这里你去:

RewriteEngine on
RewriteRule ^(.*)/([^/]+)$ $1&page=$2 [L]
RewriteRule ^([^-]+)-(.*)?$ $2&v[]=$1 [L]
RewriteRule ^(?!index\.php)([^-]+)$ /index.php?v[]=$1 [L]

你也可以通过在重写引擎的每次运行中将一个var移动到新格式来执行复杂的循环,然后继续运行它直到你用完vars,但我认为这不仅仅是一个URL重写引擎应该负责对

编辑2:好的,这是我提到的循环:

var1-var2-var3/title                             <-- Original
var1-var2-var3&page=title
var2-var3&page=title&v[]=var1
var3&page=title&v[]=var1&v[]=var2
index.php?v[]=var3&page=title&v[]=var1&v[]=var2  <-- Final

它按如下方式转换示例网址:

{{1}}