我有一个按类别列出产品的目录。如果存在_GET
变量,则在查询中使用它。我想使用“漂亮的网址”,例如:example/a/1/b/2/c/3/d/4
变为example/index.html?a=1&b=2&c=3&d=4
大多数.htaccess
示例我看到只使用变量来替换_GET
值,但我可以使用这样的规则:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4&$5=$6 [L]
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4 [L]
RewriteRule ([^/]+)/([^/]+)$ index.html?$1=$2 [L]
它有效...但是,当我添加更长和更长RewriteRules
时(比如&17=$18
),它就会停止工作。链中的最后一个变量基于早期值变成某种数组(在上面它将构建index.html?a0=a1&a3=a4
)...
.htaccess
谢谢!
答案 0 :(得分:1)
mod_rewrite最多只支持$9
和%9
。
我建议您修改脚本以使用$_SERVER['PATH_INFO']
,或者使用RewriteMap
调用脚本将路径转换为查询字符串。
答案 1 :(得分:1)
mod_rewrite
只允许你有十个反向引用,其中一个是整个匹配部分(最终只留下九个可定义的捕获组),所以你肯定受此限制。
但是,对我来说,在脚本文件中检查服务器的REQUEST_URI
/ SCRIPT_NAME
/ PATH_INFO
变量并解析它以获取键值对会更有意义来自网址。然后,您只需在.htaccess
:
RewriteRule On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.html [L]
然后你的脚本会处理剩下的事情。我不得不怀疑,如果你有那个许多GET
变量,如果它们全部被制作成“漂亮”的URL,它实际上是否更具可读性?毕竟,如果你在URL中有二十多个正斜杠,那么在这一点上传递一个普通的查询字符串可能同样好。这取决于您的应用程序以及用户如何与这些URL进行交互,因此您可能有充分的理由希望这样做。