0

我试图弄清楚如何设置 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 魔术,但我有点卡在这里。有任何想法吗?

4

1 回答 1

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 等)。

于 2013-05-01T21:14:58.310 回答