Apache .htaccess漂亮url问题(mod_重写)

Apache .htaccess漂亮url问题(mod_重写),apache,.htaccess,mod-rewrite,friendly-url,Apache,.htaccess,Mod Rewrite,Friendly Url,我有一个按类别列出产品的目录。如果存在\u GET变量,则在查询中使用该变量。我想使用“漂亮的url”,比如:example/a/1/b/2/c/3/d/4变成example/index.html?a=1&b=2&c=3&d=4 我看到的大多数.htaccess示例仅使用变量替换\u GET值,但我可以使用如下规则: Options +FollowSymlinks RewriteEngine on RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]

我有一个按类别列出产品的目录。如果存在
\u GET
变量,则在查询中使用该变量。我想使用“漂亮的url”,比如:
example/a/1/b/2/c/3/d/4
变成
example/index.html?a=1&b=2&c=3&d=4

我看到的大多数
.htaccess
示例仅使用变量替换
\u 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
(如out to
&17=$18
)时,它停止工作。链中的最后一个变量根据前面的值变成某种数组(在上面它将构建
index.html?a0=a1&a3=a4

  • 有更好的方法吗
  • 它似乎效率低下
  • .htaccess
  • 规则可以维持多久

谢谢

mod_rewrite最多只支持
$9
%9


我建议您修改脚本以使用
$\u SERVER['PATH\u INFO']
,或者使用
RewriteMap
调用脚本以将路径转换为查询字符串。

mod\u rewrite
只允许您有十个反向引用,其中一个是整个可匹配部分(最终只剩下9个可定义的捕获组),所以你肯定会受到限制

然而,对我来说,在脚本文件中检查服务器的
请求URI
/
脚本名称
/
路径信息
变量,并对其进行解析以从URL中获取键值对更有意义。然后,您只需在
.htaccess
:

RewriteRule On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.html [L]

然后你的脚本会处理剩下的部分。我真的想知道,如果你有那么多的
GET
变量,如果它们都被制作成一个“漂亮”的URL?毕竟,如果您的URL中有20多个斜杠,那么您可能同样可以传递一个普通的查询字符串。这取决于您的应用程序以及用户如何与这些URL交互,因此您可能有很好的理由希望这样做。

谢谢!Google没有显示任何关于有多少个斜杠的结果允许在.htacces中使用变量,现在我知道尝试不同的方向…将返回报告。谢谢你们两位…我已经开始使用请求URI,Tim,我正在使用您的示例规则-它很容易实现(重写地图让我伤痕累累!)。您是对的,尽管url有点漂亮,但它对我们的客户来说并不是一个巨大的优势(特别是对于更长/更具体的url)。但是,对于熟悉我们产品类别的员工来说,这是一种查找资料的便捷方式,而且更容易键入!对于更简单的查询,url非常漂亮:)再次感谢!