我正在尝试弄清楚如何设置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魔法,但我有点卡在这里。有什么想法吗?
答案 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美元等。)。