mod_rewrite根据查询参数更改“文档根”?

时间:2013-05-01 20:07:27

标签: .htaccess mod-rewrite

我正在尝试弄清楚如何设置mod_rewrite规则,以便对页面的请求(附加了URL参数)确定从中提供该文件的根目录。

这是设置。在我的“foo”目录中,我有“bar”,“bar19”,“bar27”等。

理想情况下,我想匹配“v”参数的前两个字符。像这样:

我希望通过以下方式提供.....................的请求:

www.example.com/foo/bar/something.html .......... foo/bar/something.html www.example.com/foo/bar/something.html?v=19xxx ... foo/bar19/something.html www.example.com/foo/bar/something.html?v=27xxx ... foo/bar27/something.html

当然,我希望如果“v”参数的值没有相应的404目录。

之前我做过一些Mod_Rewrite魔法,但我有点卡在这里。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在目录.htaccess中添加/foo文件,其中包含以下内容。当然,您也可以将其插入httpd.conf

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /foo

    # match query parameter v with two-digit value; capture
    # the value as %2 and the query string before and after v
    # as %1 and %3, respectively
    RewriteCond %{QUERY_STRING} ^(.*)v=(\d\d)[^&]*(&.*)?$

    # match path into "bar" and rest; insert two-digit value from
    # RewriteCond inbetween; append rest of query string without v value;
    # use case-insensitivity
    RewriteRule ^(bar)(.*)$ $1%2$2?%1%3 [NC]
</IfModule>

我认为关键是使用来自RewriteCond的捕获值(可访问为%1,%2等)同时从RewriteRule本身捕获的值(通常为$ 1, 2美元等。)。