mod_rewrite根据查询参数更改"document root"?



我想弄清楚如何设置一个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魔法,但我有点卡在这里。什么好主意吗?

添加/foo目录下的.htaccess文件,内容如下。当然,您也可以将其插入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=(dd)[^&]*(&.*)?$
    # 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等)。

最新更新