.htaccess漂亮网址问题(mod_rewrite)

时间:2010-06-29 05:29:59

标签: apache .htaccess mod-rewrite friendly-url

我有一个按类别列出产品的目录。如果存在_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
  • 中的变量数量是否有限制
  • 规则可以有多长时间?

谢谢!

2 个答案:

答案 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进行交互,因此您可能有充分的理由希望这样做。