【问题标题】:.htaccess pretty url problem (mod_rewrite).htaccess 漂亮的 url 问题(mod_rewrite)
【发布时间】:2011-03-09 11:04:06
【问题描述】:

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    mod_rewrite 最多只支持$9%9

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

    【讨论】:

    • 谢谢!谷歌没有提供任何关于 .htacces 中允许多少变量的结果,现在我知道尝试不同的方向......会报告回来。
    【解决方案2】:

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

    但是,对我来说,检查脚本文件中服务器的 REQUEST_URI/SCRIPT_NAME/PATH_INFO 变量并对其进行解析以从 URL 中获取键值对会更有意义。然后,您只需将其放在您的 .htaccess 中:

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

    然后你的脚本会处理剩下的事情。不过,我确实想知道,如果您有 那么多GET 变量,如果它们都被制成“漂亮”的 URL,它实际上是否更具可读性?毕竟,如果 URL 中有 20 多个正斜杠,那么此时只需传递一个普通的查询字符串就可以了。这取决于您的应用程序以及用户如何与这些 URL 交互,因此您可能有充分的理由希望这样做。

    【讨论】:

    • 谢谢你们......我已经开始使用 REQUEST_URI,Tim,我正在使用你的示例规则 - 它很容易实现(RewriteMaps 让我伤痕累累!)。没错,虽然 url 有点漂亮,但这对我们的客户来说并不是一个巨大的优势(尤其是对于更长/更具体的 url)。但是,对于熟悉我们产品类别的员工来说,这是一种方便的查找方式,并且更容易输入!对于更简单的查询,网址很漂亮:) 再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 2010-11-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2015-05-16
    相关资源
    最近更新 更多